AH = 00h CS = PSP segment
Microsoft recomments using INT 21/AH=4Ch for DOS 2+ execution continues at address stored in INT 22 after DOS performs whatever cleanup it needs to do
if the PSP is its own parent, the process's memory is not freed; if INT 22 additionally points into the terminating program, the process is effectively NOT terminated
not supported by MS Windows 3.0 DOSX.EXE DOS extender
SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
AH = 01h
Return: AL = character read
C/ |
---|
character is echoed to standard output
standard input is always the keyboard and standard output the screen under DOS 1.x, but they may be redirected under DOS 2+
SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
AH = 02h DL = character to write
Return: AL = last character output (despite the official docs which state
nothing is returned) (at least DOS 3.3-5.0)
Notes: ^C/^Break are checked, and INT 23 executed if pressed
standard output is always the screen under DOS 1.x, but may be redirected under DOS 2+ the last character output will be the character in DL unless DL=09h on entry, in which case AL=20h as tabs are expanded to blanks
SeeAlso: AH=06h,AH=09h
AH = 03h
Return: AL = character read Notes: keyboard checked for ^C/^Break, and INT 23 executed if detected
STDAUX is usually the first serial port
SeeAlso: AH=04h,INT 14/AH=02h,INT E0/CL=03h
AH = 04h DL = character to write
Notes: keyboard checked for ^C/^Break, and INT 23 executed if detected
STDAUX is usually the first serial port if STDAUX is busy, this function will wait until it becomes free
SeeAlso: AH=03h,INT 14/AH=01h,INT E0/CL=04h
AH = 05h DL = character to print
Notes: keyboard checked for ^C/^Break, and INT 23 executed if detected
STDPRN is usually the first parallel port, but may be redirected under DOS 2+ if the printer is busy, this function will wait
SeeAlso: INT 17/AH=00h
AH = 06h DL = character (except FFh)
Return: AL = character output (despite official docs which state nothing is
returned) (at least DOS 3.3-5.0)
Notes: does not check ^C/^Break
writes to standard output, which is always the screen under DOS 1.x, but may be redirected under DOS 2+
SeeAlso: AH=02h,AH=09h
AH = 06h DL = FFh
Return: ZF set if no character available
ZF clear if character available AL = character read
Notes: ^C/^Break are NOT checked
if the returned character is 00h, the user pressed a key with an extended keycode, which will be returned by the next call of this function reads from standard input, which is always the keyboard under DOS 1.x, but may be redirected under DOS 2+
SeeAlso: AH=0Bh
AH = 07h
Return: AL = character read from standard input Notes: does not check ^C/^Break
standard input is always the keyboard under DOS 1.x, but may be redirected under DOS 2+ if the interim console flag is set (see AX=6301h), partially-formed double-byte characters may be returned
SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
AH = 08h
Return: AL = character read from standard input Notes: ^C/^Break are checked, and INT 23 executed if detected
standard input is always the keyboard under DOS 1.x, but may be redirected under DOS 2+ if the interim console flag is set (see AX=6301h), partially-formed double-byte characters may be returned
SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
AH = 09h DS:DX -> '$'-terminated string
Return: AL = 24h (the '$' terminating the string, despite official docs which
state that nothing is returned) (at least DOS 3.3-5.0)
Notes: ^C/^Break checked, and INT 23 called if pressed
standard output is always the screen under DOS 1.x, but may be redirected under DOS 2+
SeeAlso: AH=02h,AH=06h“OUTPUT”
AH = 0Ah DS:DX -> buffer (see below)
Return: buffer filled with user input Notes: ^C/^Break checked, and INT 23 called if detected
reads from standard input, which may be redirected under DOS 2+ if the maximum buffer size (see below) is set to 00h, this call returns immediately without reading any input
SeeAlso: AH=0Ch,INT 2F/AX=4810h
Format of input buffer: Offset Size Description 00h BYTE maximum characters buffer can hold 01h BYTE (input) number of chars from last input which may be recalled
(return) number of characters actually read, excluding CR
02h N BYTEs actual characters read, including the final carriage return
AX = 0A00h DS:DX -> 6-byte buffer whose first two bytes must be 00h
Return: buffer offset 02h-05h filled with “Wced” if installed Note: WCED is a free command-line editor and history utility by Stuart
Russell
SeeAlso: AH=FFh“CED”
AH = 0Bh
Return: AL = 00h if no character available
= FFh if character is available
Notes: ^C/^Break checked, and INT 23 called if pressed
standard input is always the keyboard under DOS 1.x, but may be redirected under DOS 2+ if the interim console flag is set (see AX=6301h), this function returns AL=FFh if a partially-formed double-byte character is available
SeeAlso: AH=06h“INPUT”,AX=4406h
AX = 0B56h
Return: AX = 4952h if resident SeeAlso: AX=0D20h
AH = 0Ch AL = STDIN input function to execute after flushing buffer other registers as appropriate for the input function
Return: as appropriate for the specified input function Note: if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
no input is attempted
SeeAlso: AH=01h,AH=06h“INPUT”,AH=07h,AH=08h,AH=0Ah
AH = 0Dh
Notes: writes all modified disk buffers to disk, but does not update directory
information (that is only done when files are closed or a SYNC call is issued)
SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h
AX = 0D20h
Return: AX = 1971h if resident SeeAlso: AX=0B56h,AH=30h/DX=ABCDh
AH = 0Eh DL = new default drive (00h = A:, 01h = B:, etc)
Return: AL = number of potentially valid drive letters Notes: under Novell NetWare, the return value is always 32, the number of
drives that NetWare supports under DOS 3+, the return value is the greatest of 5, the value of LASTDRIVE= in CONFIG.SYS, and the number of drives actually present on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy may be accessed as either A: or B: otherwise, the return value is the highest drive actually present DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives, and 3+ a maximum of 26 drives
SeeAlso: AH=19h,AH=3Bh,AH=DBh
AH = 0Fh DS:DX -> unopened File Control Block (see below)
Return: AL = status 00h successful FFh file not found or access denied
(DOS 3.1+) file opened for read/write in compatibility mode
an unopened FCB has the drive, filename, and extension fields filled in and all other bytes cleared
not supported by MS Windows 3.0 DOSX.EXE DOS extender
SeeAlso: AH=10h,AH=16h,AH=3Dh
Offset | Size | Description |
---|---|---|
-7 | BYTE | extended FCB if FFh |
-6 | 5 BYTEs | reserved |
-1 | BYTE | file attribute if extended FCB |
00h | BYTE | drive number (0 = default, 1 = A, etc) |
01h | 8 BYTEs | blank-padded file name |
09h | 3 BYTEs | blank-padded file extension |
0Ch | WORD | current block number |
0Eh | WORD | logical record size |
10h | DWORD | file size |
14h | WORD | date of last write (see AX=5700h) |
16h | WORD | time of last write (see AX=5700h) (DOS 1.1+) |
18h | 8 BYTEs | reserved (see below) |
20h | BYTE | record within current block |
21h | DWORD | random access record number (if record size is > 64 bytes, high byte is omitted) |
to use an extended FCB, you must specify the address of the FFh flag at offset -7, rather than the address of the drive number field
Offset | Size | Description |
---|---|---|
16h | WORD | location in directory (if high byte = FFh, low byte is device ID) |
18h | WORD | number of first cluster in file |
1Ah | WORD | last cluster number accessed (absolute) |
1Ch | WORD | relative current cluster number |
1Eh | BYTE | dirty flag (00h = not dirty) |
1Fh | BYTE | unused |
Offset | Size | Description |
---|---|---|
18h | BYTE | bit 7: set if logical device bit 6: not dirty bits 5-0: disk number or logical device ID |
19h | WORD | starting cluster number |
1Bh | WORD | absolute current cluster number |
1Dh | WORD | relative current cluster number |
1Fh | BYTE | unused |
Offset | Size | Description |
---|---|---|
18h | BYTE | bit 7: set if logical device bit 6: set if open??? bits 5-0: ??? |
19h | WORD | starting cluster number |
1Bh | WORD | ??? |
1Dh | BYTE | ??? |
1Eh | BYTE | ??? |
1Fh | BYTE | ??? |
Offset | Size | Description |
---|---|---|
18h | BYTE | number of system file table entry for file |
19h | BYTE | attributes bits 7,6: * 00 = SHARE.EXE not loaded, disk file * 01 = SHARE.EXE not loaded, character device * 10 = SHARE.EXE loaded, remote file * 11 = SHARE.EXE loaded, local file bits 5-0: * low six bits of device attribute word—SHARE.EXE loaded, local file (DOS 3.x and 5.0)— |
1Ah | WORD | starting cluster of file |
1Ch | WORD | (DOS 3.x) offset within SHARE of sharing record (see AH=52h)\\(DOS 5.0) unique sequence number of sharing record |
1Eh | BYTE | file attribute |
1Fh | BYTE | ??? |
—SHARE.EXE loaded, remote file— | ||
1Ah | WORD | number of sector containing directory entry |
1Ch | WORD | relative cluster within file of last cluster accessed |
1Eh | BYTE | absolute cluster number of last cluster accessed |
1Fh | BYTE | ??? |
—SHARE.EXE not loaded— | ||
1Ah | BYTE | (low byte of device attribute word AND 0Ch) OR open mode |
1Bh | WORD | starting cluster of file |
1Dh | WORD | number of sector containing directory entry |
1Fh | BYTE | number of directory entry within sector |
if FCB opened on character device, DWORD at 1Ah is set to the address of the device driver header, then the BYTE at 1Ah is overwritten.
AH = 10h DS:DX -> File Control Block (see AH=0Fh)
Return: AL = status
00h successful FFh failed
Notes: a successful close forces all disk buffers used by the file to be
written and the directory entry to be updated not supported by MS Windows 3.0 DOSX.EXE DOS extender
SeeAlso: AH=0Fh,AH=16h,AH=3Eh
AH = 11h DS:DX -> unopened FCB (see AH=0Fh), may contain '?' wildcards
Return: AL = status 00h successful [DTA] unopened FCB for first matching file FFh no matching filename, or bad FCB
the type of the returned FCB depends on whether the input FCB was a normal or an extended FCB
for extended FCBs with search attribute 08h, the volume label (if any) will be returned even if the current directory is not the root dir.
DOS 3+ also allows the '*' wildcard
the search FCB must not be modified if AH=12h will be used to continue searching; DOS 3.3 has set the following parts of the FCB:
0Ch BYTE ??? 0Dh WORD directory entry number of matching file 0Fh WORD cluster number of current directory 11h 4 BYTEs ??? 15h BYTE drive number (1=A:)
at least for DOS 3.3, the unopened FCB in the DTA is actually the drive number followed by the file's directory entry
AH = 12h DS:DX -> unopened FCB (see AH=0Fh)
Return: AL = status 00h successful [DTA] = unopened FCB FFh no more matching filenames
(see AH=11h)
assumes that successful FindFirst executed on search FCB before call
SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
AH = 13h DS:DX -> unopened FCB (see AH=0Fh), filename filled with template for deletion ('?' wildcards allowed)
Return: AL = status 00h one or more files successfully deleted FFh no matching files or all were read-only or locked
DOS 1.25+ deletes everything in the current directory (including subdirectories) and sets the first byte of the name to 00h (entry never used) instead of E5h if called on an extended FCB with filename '???????????' and bits 0-4 of the attribute set (bits 1 and 2 for DOS 1.x). This may have originally been an optimization to minimize directory searching after a mass deletion (DOS 1.25+ stop the directory search upon encountering a never-used entry), but can corrupt the filesystem under DOS 2+ because subdirectories are removed without deleting the files they contain.
currently-open files should not be deleted
SeeAlso: AH=41h,INT 2F/AX=1113h
AH = 14h DS:DX -> opened FCB (see AH=0Fh)
Return: AL = status 00h successful 01h end of file (no data) 02h segment wrap in DTA 03h end of file, partial record read [DTA] = record read from file
reads a record of the size specified in the FCB beginning at the current file position, then updates the current block and current record fields in the FCB
if a partial record was read, it is zero-padded to the full size not supported by MS Windows 3.0 DOSX.EXE DOS extender
SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh,INT 2F/AX=1108h
AH = 15h DS:DX -> opened FCB (see AH=0Fh) [DTA] = record to write
Return: AL = status 00h successful 01h disk full 02h segment wrap in DTA
Notes: writes a record of the size specified in the FCB beginning at the current file position, then updates the current block and current record fields in the FCB
if less than a full sector is written, the data is placed in a DOS buffer to be written out at a later time
not supported by MS Windows 3.0 DOSX.EXE DOS extender
SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
AH = 16h DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
Return: AL = status
00h successful FFh directory full or file exists and is read-only or locked
Notes: if file already exists, it is truncated to zero length
if an extended FCB is used, the file is given the attribute in the FCB not supported by MS Windows 3.0 DOSX.EXE DOS extender
SeeAlso: AH=0Fh,AH=10h,AH=3Ch
AH = 17h DS:DX -> modified FCB (see also AH=0Fh) the old filename ('?' wildcards OK) is in the standard location while the new filename ('?' wildcards OK) is stored in the 11 bytes beginning at offset 11h <code>
Return: AL = status
00h successfully renamed FFh no matching files,file is read-only, or new name already exists
</code>
subdirectories may be renamed using an extended FCB with the appropriate attribute
SeeAlso: AH=0Fh,AH=13h,AH=56h,INT 2F/AX=1111h
AH = 18h
Return: AL = 00h
corresponds to the CP/M BDOS function “get bit map of logged drives”, which is meaningless under MSDOS
SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h
AH = 19h
Return: AL = drive (00h = A:, 01h = B:, etc)
SeeAlo: AH=0Eh,AH=47h
AH = 1Ah DS:DX -> Disk Transfer Area (DTA)
the DTA is set to PSP:0080h when a program is started
SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
AH = 1Bh
Return: AL = sectors per cluster (allocation unit) CX = bytes per sector DX = total number of clusters DS:BX -> media ID byte (see below)
under DOS 1.x, DS:BX points at an actual copy of the FAT; later versions return a pointer to a copy of the FAT's ID byte
SeeAlso: AH=1Ch,AH=36h
Values for media ID byte:
FFh | floppy, double-sided, 8 sectors per track (320K) |
FEh | floppy, single-sided, 8 sectors per track (160K) |
FDh | floppy, double-sided, 9 sectors per track (360K) |
FCh | floppy, single-sided, 9 sectors per track (180K) |
F9h | floppy, double-sided, 15 sectors per track (1.2M) |
F8h | hard disk |
F0h | other |
AH = 1Ch DL = drive (00h = default, 01h = A:, etc)
Return: AL = sectors per cluster (allocation unit) CX = bytes per sector DX = total number of clusters DS:BX -> media ID byte (see AH=1Bh)
under DOS 1.x, DS:BX points at an actual copy of the FAT; later versions return a pointer to a copy of the FAT's ID byte
SeeAlso: AH=1Bh,AH=36h
AH = 1Dh
Return: AL = 00h
corresponds to the CP/M BDOS function “get bit map of read-only drives”, which is meaningless under MSDOS
SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
AH = 1Eh
Return: AL = 00h
corresponds to a CP/M BDOS function which is meaningless under MSDOS
SeeAlso: AH=18h,AH=1Dh,AH=20h
AH = 1Fh
Return: AL = status 00h successful DS:BX -> Drive Parameter Block (DPB) (see below for DOS 1.x, AH=32h for DOS 2+) FFh invalid drive
documented for DOS 5.0, but undocumented in prior versions
SeeAlso: AH=32h
Format of DOS 1.1 and MSDOS 1.25 drive parameter block:
Offset | Size | Description |
---|---|---|
00h | BYTE | sequential device ID |
01h | BYTE | logical drive number (0=A:) |
02h | WORD | bytes per sector |
04h | BYTE | highest sector number within a cluster |
05h | BYTE | shift count to convert clusters into sectors |
06h | WORD | starting sector number of first FAT |
08h | BYTE | number of copies of FAT |
09h | WORD | number of directory entries |
0Bh | WORD | number of first data sector |
0Dh | WORD | highest cluster number (number of data clusters + 1) |
0Fh | BYTE | sectors per FAT |
10h | WORD | starting sector of directory |
12h | WORD | address of allocation table |
the DOS 1.0 table is the same except that the first and last fields are missing
AH = 20h
Return: AL = 00h
corresponds to the CP/M BDOS function “get/set default user number”, which is meaningless under MSDOS
SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
AH = 21h DS:DX -> opened FCB (see AH=0Fh)
Return: AL = status 00h successful 01h end of file, no data read 02h segment wrap in DTA, no data read 03h end of file, partial record read [DTA] = record read from file
the record is read from the current file position as specified by the random record and record size fields of the FCB
the file position is not updated after reading the record
if a partial record is read, it is zero-padded to the full size
not supported by MS Windows 3.0 DOSX.EXE DOS extender
SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh
AH = 22h DS:DX -> opened FCB (see AH=0Fh) [DTA] = record to write
Return: AL = status 00h successful 01h disk full 02h segment wrap in DTA
the record is written to the current file position as specified by the random record and record size fields of the FCB
the file position is not updated after writing the record
if the record is located beyond the end of the file, the file is extended but the intervening data remains uninitialized
if the record only partially fills a disk sector, it is copied to a DOS disk buffer to be written out to disk at a later time
not supported by MS Windows 3.0 DOSX.EXE DOS extender
SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
AH = 23h DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed
Return: AL = status 00h successful (matching file found) FCB random record field filled with size in records, rounded up to next full record FFh failed (no matching file found)
not supported by MS Windows 3.0 DOSX.EXE DOS extender
SeeAlso: AH=42h
AH = 24h DS:DX -> opened FCB (see AH=0Fh)
computes the random record number corresponding to the current record number and record size, then stores the result in the FCB
normally used when switching from sequential to random access
not supported by MS Windows 3.0 DOSX.EXE DOS extender
SeeAlso: AH=21h,AH=27h,AH=42h
AH = 25h AL = interrupt number DS:DX -> new interrupt handler
this function is preferred over direct modification of the interrupt vector table
SeeAlso: AH=35h
AX = 2501h
Return: CF clear
Note: Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
system calls. Only available when directly using 386/DOS-Extender, or when using a product that was created using 386-DOS/Extender
SeeAlso: AH=30h“Phar Lap”
AX = 2502h CL = interrupt number
Return: ES:EBX → 48-bit address of protected-mode interrupt handler
CF clear
SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
AX = 2503h CL = interrupt number
Return: EBX = 32-bit address of real-mode interrupt handler
CF clear
SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
AX = 2504h CL = interrupt number DS:EDX -> 48-bit address of protected-mode interrupt handler
Return: CF clear SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
AX = 2505h CL = interrupt number EBX = 32-bit address of real-mode interrupt handler
Return: CF clear SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
AX = 2506h CL = interrupt number DS:EDX -> 48-bit address of protected-mode interrupt handler
Return: CF clear Note: This function modifies both the real-mode low-memory interrupt
vector table and the protected-mode Interrupt Descriptor Table (IDT) Interrupts occurring in real mode are resignaled in protected mode.
AX = 2507h CL = interrupt number DS:EDX -> 48-bit address of protected-mode interrupt handler EBX = 32-bit address of real-mode interrupt handler
Return: CF clear Note: interrupts are disabled until both vectors have been modified SeeAlso: AX=2504h,AX=2505h
AX = 2508h BX = segment selector
Return: CF clear if successful
ECX = linear base address of segment CF set if invalid segment selector
AX = 2509h EBX = linear address to convert
Return: CF clear if successful
ECX = physical address (carry flag clear) CF set if linear address not mapped in page tables
AX = 250Ah ES = segment selector in the Local Descriptor Table (LDT) of segment to modify EBX = physical base address of memory to map (multiple of 4K) ECX = number of physical 4K pages to map
Return: CF clear if successful
EAX = 32-bit offset in segment of mapped memory CF set on error EAX = error code 08h insufficient memory to create page tables 09h invalid segment selector
SeeAlso: INT 31/AX=0800h
AX = 250Ch
Return: CF clear
AL = base interrupt vector for IRQ0-IRQ7 AH = base interrupt vector for IRQ8-IRQ15 BL = interrupt vector for BIOS print screen function
SeeAlso: INT 31/AX=0400h
AX = 250Dh
Return: CF clear
EAX = 32-bit address of real-mode 386/DOS-Extender proc that will call through from real mode to a protected-mode routine EBX = 32-bit real-mode address of intermode call data buffer ECX = size in bytes of intermode call data buffer ES:EDX -> protected-mode address of intermode call data buffer
AX = 250Eh EBX = 32-bit address of real-mode procedure to call ECX = number of two-byte words to copy from protected-mode stack to real-mode stack
Return: CF clear if successful
all segment registers unchanged all general registers contain values set by real-mode procedure all other flags set as they were left by real-mode procedure CF set on error EAX = error code 01h not enough real-mode stack space
SeeAlso: AH=E1h“OS/286”,INT 31/AX=0301h
AX = 250Fh ES:EBX -> 48-bit protected-mode address to convert ECX = length of data, in bytes
Return: CF clear if successful
ECX = 32-bit MS-DOS address CF set on error ECX destroyed
SeeAlso: AX=2510h
AX = 2510h EBX = 32-bit address of real-mode procedure to call ECX = number of two-byte words to copy to protected-mode stack to real-mode stack DS:EDX -> pointer to parameter block (see below)
Return: CF clear if successful
all segment registers unchanged, EDX unchanged all other general registers contain values set by real-mode proc all other flags are set as they were left by real-mode procedure real-mode register values are returned in the parameter block CF set on error EAX = error code 01h not enough real-mode stack space
SeeAlso: AX=250Fh
Format of parameter block: Offset Size Description 00h WORD real-mode DS value 02h WORD real-mode ES value 04h WORD real-mode FS value 06h WORD real-mode GS value 08h DWORD real-mode EAX value 0Ch DWORD real-mode EBX value 10h DWORD real-mode ECX value 14h DWORD real-mode EDX value
AX = 2511h DS:EDX -> pointer to parameter block (see below)
Return: all segment registers unchanged
EDX unchanged all other registers contain values set by the real-mode int handler the flags are set as they were left by the real-mode interrupt handler real-mode register values are returned in the parameter block
SeeAlso: AX=2503h,AX=2505h,AH=E3h“OS/286”,INT 31/AX=0300h
Format of parameter block: Offset Size Description 00h WORD interrupt number 02h WORD real-mode DS value 04h WORD real-mode ES value 06h WORD real-mode FS value 08h WORD real-mode GS value 0Ah DWORD real-mode EAX value 0Eh DWORD real-mode EDX value Note: all other real-mode values set from protected-mode registers
AX = 2512h DS:EDX -> pointer to ASCIIZ program name ES:EBX -> pointer to parameter block (see below) ECX = size in bytes of LDT buffer
Return: CF clear if successful
EAX = number of segment descriptors in LDT CF set on error EAX = error code 02h file not found or path invalid 05h access denied 08h insufficient memory 0Ah environment invalid 0Bh invalid file format 80h LDT too small
Format of parameter block: Offset Size Description Input: 00h DWORD 32-bit offset of environment string 04h WORD segment of environment string 06h DWORD 32-bit offset of command-tail string 0Ah WORD segment of command-tail string 0Ch DWORD 32-bit offset of LDT buffer (size in ECX) 10h WORD segment of LDT buffer Output: 12h WORD real-mode paragraph address of PSP (see also AH=26h) 14h WORD real/protected mode flag
0000h real mode 0001h protected mode
16h DWORD initial EIP value 1Ah WORD initial CS value 1Ch DWORD initial ESP value 20h WORD initial SS value 22h WORD initial DS value 24h WORD initial ES value 26h WORD initial FS value 28h WORD initial GS value
AX = 2513h BX = segment selector of descriptor in GDT or LDT CL = access-rights byte for alias descriptor CH = use-type bit (USE16 or USE32) for alias descriptor
Return: CF clear if successful
AX = segment selector for created alias CF set on error EAX = error code 08h insufficient memory (can't grow LDT) 09h invalid segment selector in BX
AX = 2514h BX = segment selector of descriptor in GDT or LDT CL = new access-rights byte CH = new use-type bit (USE16 or USE32)
Return: CF clear if successful
CF set on error EAX = error code 09h invalid selector in BX
SeeAlso: AX=2515h,INT 31/AX=0009h
AX = 2515h BX = segment selector of descriptor in GDT or LDT
Return: CF clear if successful
CL = access-rights byte for segment CH = use-type bit (USE16 or USE32) ECX<16-31> destroyed CF set on error EAX = error code 09h invalid segment selector in BX
SeeAlso: AX=2514h
AX = 2516h ???
Return: ???
AX = 2517h ???
Return: ???
AX = 2518h ???
Return: ???
AX = 2519h
Return: CF clear
EAX = error code 0000h no error 0001h out of physical memory 0002h out of swap space (unable to grow swap file) 0003h out of LDT entries and unable to grow LDT 0004h unable to change extended memory allocation mark FFFFFFFFh paging disabled
Note: VMM is the Virtual Memory Manager option
AX = 251Ah EDX = number of 4k pages to lock if BL = 00h ECX = linear address of first page to lock if BL = 01h ES:ECX -> pointer to first page to lock
Return: CF clear if successful
CF set on error EAX = error code 08h insufficient memory 09h invalid address range
SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
AX = 251Bh EDX = number of pages to unlock if BL = 00h ECX = linear address of first page to unlock if BL = 01h ES:ECX -> pointer to first page to unlock
Return: CF clear if successful
CF set on error EAX = error code 09h invalid address range
SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
AX = 251Dh ???
Return: ??? SeeAlso: AX=251Eh,AX=EB00h,INT 31/AX=0506h
AX = 251Eh ???
Return: ??? SeeAlso: AX=251Dh,INT 31/AX=0507h
AX = 251Fh ???
Return: ??? SeeAlso: AX=251Dh,AX=251Eh
AX = 2520h DS:EDX -> pointer to buffer at least 100 bytes in size (see below) BL = 0 (don't reset VM stats), 1 (reset VM stats)
Return: carry flag clear
Format of VM stats buffer: Offset Size Description 00h DWORD VM status
0001h VM subsystem is present 0000h VM not present
04h DWORD “nconvpg” number of conventional memory pages available 08h DWORD “nbimpg” number of Compaq built-in memory pages available 0Ch DWORD “nextpg” total number of extended memory pages 10h DWORD “extlim” extender memory pages limit 14h DWORD “aphyspg” number of physical memory pages allocated to appl 18h DWORD “alockpg” number of locked pages owned by application 1Ch DWORD “sysphyspg” number physical memory pages allocated to system 20h DWORD “nfreepg” number of free physical pages; approx if EMS VCPI 24h DWORD linear address of beginning of application address space 28h DWORD linear address of end of application address space 2Ch DWORD number of seconds since last time VM stats were reset 30h DWORD number of page faults since last time 34h DWORD number of pages written to swap file since last time 38h DWORD number of reclaimed pages (page faults on swapped pages) 3Ch DWORD number of virtual pages allocated to the application 40h DWORD size in pages of swap file 44h DWORD number of system pages allocated with EMS calls 48h DWORD minimum number of conventional memory pages 4Ch DWORD maximum size in bytes to which swap file can be increased 50h DWORD “vmflags” bit 0 = 1 if page fault in progress 54h 16 BYTEs reserved for future expansion (set to zero)
AX = 2521h EBX = max 4k pages of physical extended memory which program may use
Return: CF clear if successful
EBX = maximum limit in pages ECX = minimum limit in pages CF set on error EAX = error code 08h insufficient memory or -nopage switch used
SeeAlso: AX=2522h
AX = 2522h ???
Return: ??? SeeAlso: AX=2523h
AX = 2523h ???
Return: ??? SeeAlso: AX=2522h
AX = 2524h ???
Return: ???
AX = 2525h EBX = limit in 4k pages of physical conventional memory which program may use
Return: CF clear if successful
EBX = maximum limit in pages ECX = minimum limit in pages CF set on error EAX = error code 08h insufficient memory or -nopage switch used
SeeAlso: AX=2521h
AX = 2526h ???
Return: ???
AX = 25C0h BX = number of 16-byte paragraphs of MS-DOS memory requested
Return: CF clear if successful
AX = real-mode paragraph address of memory CF set on error AX = error code 07h MS-DOS memory control blocks destroyed 08h insufficient memory BX = size in paragraphs of largest available memory block
SeeAlso: AX=25C1h,AX=25C2h
AX = 25C1h CX = real-mode paragraph address of memory block to free
Return: CF clear if successful
EAX destroyed CF set on error AX = error code 07h MS-DOS memory control blocks destroyed 09h invalid memory block address in CX
SeeAlso: AX=25C0h,AX=25C2h
AX = 25C2h BX = new requested block size in paragraphs CX = real-mode paragraph address of memory block to modify
Return: CF clear if successful
EAX destroyed CF set on error AX = error code 07h MS-DOS memory control blocks destroyed 08h insufficient memory 09h invalid memory block address in CX BX = size in paragraphs of largest available memory block
SeeAlso: AX=25C0h,AX=25C1h
AX = 25C3h ES:EBX -> pointer to parameter block (see below) DS:EDX -> pointer to ASCIIZ program filename
Return: CF clear if successful
all registers unchanged CF set on error EAX = error code 01h function code in AL is invalid ??? 02h file not found or path invalid 05h access denied 08h insufficient memory to load program 0Ah environment invalid 0Bh invalid file format
Format of parameter block: Offset Size Description 00h DWORD 32-bit offset of environment string 04h WORD segment selector of environment string 06h DWORD 32-bit offset of command-tail string 0Ah WORD segment selector of command-tail string
AH = 26h DX = segment at which to create PSP (see below for format)
new PSP is updated with memory size information; INTs 22h, 23h, 24h taken from interrupt vector table
(DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to copy
SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
Offset | Size | Description |
---|---|---|
00h | 2 BYTEs | INT 20 instruction for CP/M CALL 0 program termination |
02h | WORD | segment of first byte beyond memory allocated to program |
04h | BYTE | unused filler |
05h | BYTE | CP/M CALL 5 service request (FAR JMP to 000C0h) BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh |
06h | WORD | CP/M compatibility–size of first segment for .COM files |
08h | 2 BYTEs | remainder of FAR JMP at 05h |
0Ah | DWORD | stored INT 22 termination address |
0Eh | DWORD | stored INT 23 control-Break handler address |
12h | DWORD | DOS 1.1+ stored INT 24 critical error handler address |
16h | WORD | segment of parent PSP |
18h | 20 BYTEs | DOS 2+ Job File Table, one byte per file handle, FFh = closed |
2Ch | WORD | DOS 2+ segment of environment for process |
2Eh | DWORD | DOS 2+ process's SS:SP on entry to last INT 21 call |
32h | WORD | DOS 3+ number of entries in JFT (default 20) |
34h | DWORD | DOS 3+ pointer to JFT (default PSP:0018h) |
38h | DWORD | DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x) used by SHARE in DOS 3.3 |
3Ch | 4 BYTEs | unused by DOS versions ⇐ 5.00 |
40h | 2 BYTEs | DOS 5.0 version to return on INT 21/AH=30h |
42h | 6 BYTEs | unused by DOS versions ⇐ 5.00 |
48h | BYTE | (MSWindows3) bit 0 set if non-Windows application |
49h | 7 BYTEs | unused by DOS versions ⇐ 5.00 |
50h | 3 BYTEs | DOS 2+ service request (INT 21/RETF instructions) |
53h | 9 BYTEs | unused in DOS versions ⇐ 5.00 |
5Ch | 16 BYTEs | first default FCB, filled in from first commandline argument overwrites second FCB if opened |
6Ch | 16 BYTEs | second default FCB, filled in from second commandline argument overwrites beginning of commandline if opened |
7Ch | 4 BYTEs | unused |
80h | 128 BYTEs | commandline / default DTA command tail is BYTE for length of tail, N BYTEs for the tail, followed by a BYTE containing 0Dh |
in DOS versions 3.0 and up, the limit on simultaneously open files may be increased by allocating memory for a new open file table, filling it with FFh, copying the first 20 bytes from the default table, and adjusting the pointer and count at 34h and 32h. However, DOS versions through at least 3.30 will only copy the first 20 file handles into a child PSP (including the one created on EXEC).
network redirectors based on the original MS-Net implementation use values of 80h-FEh in the open file table to indicate remote files
MSDOS 5.00 incorrectly fills the FCB fields when loading a program high; the first FCB is empty and the second contains the first parameter
Offset | Size | Description |
---|---|---|
00h | N BYTEs | first environment variable, ASCIZ string of form “var=value” |
N BYTEs | second environment variable, ASCIZ string | |
… | ||
N BYTEs | last environment variable, ASCIZ string of form “var=value” | |
BYTE | 00h | |
—DOS 3+— | ||
WORD | number of strings following environment (normally 1) | |
N BYTEs | ASCIZ full pathname of program owning this environment | |
other strings may follow |
AH = 27h CX = number of records to read DS:DX -> opened FCB (see AH=0Fh)
Return: AL = status 00h successful, all records read 01h end of file, no data read 02h segment wrap in DTA, no data read 03h end of file, partial read [DTA] = records read from file CX = number of records read (return AL = 00h or 03h)
read begins at current file position as specified in FCB; the file position is updated after reading
not supported by MS Windows 3.0 DOSX.EXE DOS extender
SeeAlso: AH=21h,AH=28h,AH=3Fh
AH = 28h CX = number of records to write DS:DX -> opened FCB (see AH=0Fh) [DTA] = records to write
Return: AL = status 00h successful 01h disk full or file read-only 02h segment wrap in DTA CX = number of records written
write begins at current file position as specified in FCB; the file position is updated after writing
if CX = 0000h on entry, no data is written; instead the file size is adjusted to be the same as the file position specified by the random record and record size fields of the FCB
if the data to be written is less than a disk sector, it is copied into a DOS disk buffer, to be written out to disk at a later time
not supported by MS Windows 3.0 DOSX.EXE DOS extender
SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h
AH = 29h AL = parsing options bit 0: skip leading separators bit 1: use existing drive number in FCB if no drive is specified, instead of setting field to zero bit 2: use existing filename in FCB if no base name is specified, instead of filling field with blanks bit 3: use existing extension in FCB if no extension is specified, instead of filling field with blanks bits 4-7: reserved (0) DS:SI -> filename string (both '*' and '?' wildcards OK) ES:DI -> buffer for unopened FCB
Return: AL = result code 00h successful parse, no wildcards encountered 01h successful parse, wildcards present FFh failed (invalid drive specifier) DS:SI -> first unparsed character ES:DI buffer filled with unopened FCB (see AH=0Fh)
asterisks expanded to question marks in the FCB
all processing stops when a filename terminator is encountered
cannot be used with filespecs which include a path (DOS 2+)
SeeAlso: AH=0Fh,AH=16h,AH=26h
AH = 2Ah
Return: CX = year (1980-2099) DH = month DL = day ---DOS 1.10+--- AL = day of week (00h=Sunday)
SeeAlso: AH=2Bh“DOS”,AH=2Ch,AH=E7h,INT 1A/AH=04h,INT 2F/AX=120Dh
AH = 2Bh CX = year (1980-2099) DH = month DL = day
Return: AL = status 00h successful FFh invalid date, system date unchanged
DOS 3.3+ also sets CMOS clock
SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
AH = 2Bh CX = 4149h ('AI') DX = 413Fh ('A?')
Return: AL <> FFh if installed
Borland's TKERNEL makes this call
AH = 2Bh CX = 4358h ('CX')
Return: AL = FFh if PC-Cache not installed AL = 00h if installed CX = 6378h ('cx') BX = ??? DX = ???
SeeAlso: INT 16/AX=FFA5h/CX=1111h
AH = 2Bh CX = 4445h ('DE') DX = 5351h ('SQ') AL = subfunction (DV v2.00+) 01h get version Return: BX = version (BH = major, BL = minor) Note: early copies of v2.00 return 0002h 02h get shadow buffer info, and start shadowing Return: BH = rows in shadow buffer BL = columns in shadow buffer DX = segment of shadow buffer 04h get shadow buffer info Return: BH = rows in shadow buffer BL = columns in shadow buffer DX = segment of shadow buffer 05h stop shadowing
Return: AL = FFh if DESQview not installed
in DESQview v1.x, there were no subfunctions; this call only identified whether or not DESQview was loaded
SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
AH = 2Bh CX = 454Ch ('EL') DX = 5253h ('RS')
Return: ES:BX -> ELRES history structure (see below) DX = DABEh (signature, DAve BEnnett)
ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett which stores recent errorlevel values, allows them to be retrieved for use in batch files, and can place them in an environment variable
SeeAlso: AH=4Bh“ELRES”,AH=4Dh
Offset | Size | Description |
---|---|---|
00h | WORD | number of return codes which can be stored by following buffer |
02h | WORD | current position in buffer (treated as a ring) |
04h | N BYTEs | ELRES buffer |
AX = 2B01h CX = 5441h ('TA') DX = 4D45h ('ME') ---v2.60--- BH = ??? 00h skip ???, else do
Return: AL = 02h if installed ES:DX -> data area in TAME-RES (see below)
TAME is a shareware program by David G. Thomas which gives up CPU time to other partitions under a multitasker when the current partition's program incessantly polls the keyboard or system time
Offset | Size | Description |
---|---|---|
00h | BYTE | data structure minor version number (01h in TAME 2.20) |
01h | BYTE | data structure major version number (07h in TAME 2.20) |
02h | DWORD | number of task switches |
06h | DWORD | number of keyboard polls |
0Ah | DWORD | number of time polls |
0Eh | DWORD | number of times DESQview told program runs only in foreground |
12h | DWORD | original INT 10h |
16h | DWORD | original INT 14h |
1Ah | DWORD | original INT 15h |
1Eh | DWORD | original INT 16h |
22h | DWORD | original INT 17h |
26h | DWORD | original INT 21h |
2Ah | DWORD | original INT 28h |
2Eh | WORD | offset of TAME INT 10h handler |
30h | WORD | offset of TAME INT 14h handler |
32h | WORD | offset of TAME INT 15h handler |
34h | WORD | offset of TAME INT 16h handler |
36h | WORD | offset of TAME INT 17h handler |
38h | WORD | offset of TAME INT 21h handler |
3Ah | WORD | offset of TAME INT 28h handler |
3Ch | WORD | X in /max:X,Y or /freq:X,Y |
3Eh | WORD | Y in /max:X,Y or /freq:X,Y |
40h | WORD | number of polls remaining before next task switch |
42h | WORD | /KEYIDLE value |
44h | BYTE | flags for interrupts already grabbed by TAME bit 0: INT 10h bit 1: INT 14h bit 2: INT 15h bit 3: INT 16h bit 4: INT 17h bit 5: INT 21h bit 6: INT 28h |
45h | BYTE | flags for interrupts which may be acted on (same bits as above) |
46h | BYTE | TAME enabled (01h) or disabled (00h) |
47h | BYTE | /TIMEPOLL (01h) or /NOTIMEPOLL (00h) |
48h | BYTE | /NOTIMER (01h) or /TIMER (00h) |
49h | BYTE | window or task number for this task |
4Ah | BYTE | multitasker type ??? 01h DESQview 02h DoubleDOS 03h TopView ??? |
4Bh | BYTE | type of task switching selected bit 0: DESQview??? bit 1: DoubleDOS??? bit 2: TopView??? bit 3: KeySwitch bit 4: HLT instruction |
4Ch | BYTE | ??? |
4Dh | BYTE | flags bit 1: /FREQ instead of /MAX |
4Eh | BYTE | /FG: value |
4Fh | BYTE | task switches left until next FGONLY DESQview API call |
50h | BYTE | ??? |
Offset | Size | Description |
---|---|---|
00h | BYTE | data structure minor version number (02h in TAME 2.30) |
01h | BYTE | data structure major version number (0Ah in TAME 2.30) |
02h | DWORD | number of task switches |
06h | DWORD | number of keyboard polls |
0Ah | DWORD | number of time polls |
0Eh | DWORD | number of times DESQview told program runs only in foreground |
12h | DWORD | time of last /CLEAR or TAME-RES load |
16h | DWORD | time yielded |
1Ah | DWORD | time spent polling |
1Eh | DWORD | time spent waiting on key input with INT 16/AH=01h,11h |
22h | DWORD | original INT 10h |
26h | DWORD | original INT 14h |
2Ah | DWORD | original INT 15h |
2Eh | DWORD | original INT 16h |
32h | DWORD | original INT 17h |
36h | DWORD | original INT 21h |
3Ah | DWORD | original INT 28h |
3Eh | WORD | offset of TAME INT 10h handler |
40h | WORD | offset of TAME INT 14h handler |
42h | WORD | offset of TAME INT 15h handler |
44h | WORD | offset of TAME INT 16h handler |
46h | WORD | offset of TAME INT 17h handler |
48h | WORD | offset of TAME INT 21h handler |
4Ah | WORD | offset of TAME INT 28h handler |
4Ch | WORD | X in /max:X,Y or /freq:X,Y |
4Eh | WORD | Y in /max:X,Y or /freq:X,Y |
50h | WORD | number of polls remaining before next task switch |
52h | WORD | /KEYIDLE value |
54h | WORD | /FG: value |
56h | WORD | task switches left until next FGONLY DESQview API call |
58h | WORD | multitasker version |
5Ah | WORD | virtual screen segment |
5Ch | BYTE | flags for interrupts already grabbed by TAME bit 0: INT 10h bit 1: INT 14h bit 2: INT 15h bit 3: INT 16h bit 4: INT 17h bit 5: INT 21h bit 6: INT 28h |
5Dh | BYTE | flags for interrupts which may be acted on (same bits as above) |
5Eh | BYTE | window or task number for this task |
5Fh | BYTE | multitasker type 01h DESQview 02h DoubleDOS 03h TopView 04h OmniView 05h VM/386 |
60h | BYTE | type of task switching selected (bit flags) bit 0: DESQview bit 1: DoubleDOS bit 2: TopView bit 3: OmniView bit 4: KeySwitch bit 5: HLT instruction |
61h | BYTE | watch_DOS |
62h | BYTE | bit flags bit 0: TAME enabled bit 1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick) bit 2: /TIMEPOLL bit 3: /KEYPOLL bit 4: inhibit timer bit 5: enable status monitoring |
63h | BYTE | old status |
64h | WORD | signature DA34h |
Offset | Size | Description |
---|---|---|
00h | BYTE | data structure minor version number (02h in TAME 2.60) |
01h | BYTE | data structure major version number (0Bh in TAME 2.60) |
02h | DWORD | number of task switches |
06h | DWORD | number of keyboard polls |
0Ah | DWORD | number of time polls |
0Eh | DWORD | number of times DESQview told program runs only in foreground |
12h | DWORD | time of last /CLEAR or TAME-RES load |
16h | DWORD | time yielded |
1Ah | DWORD | time spent polling |
1Eh | DWORD | time spent waiting on key input with INT 16/AH=01h,11h |
22h | 4 BYTEs | ??? |
26h | DWORD | original INT 10h |
2Ah | DWORD | original INT 14h |
2Eh | DWORD | original INT 15h |
32h | DWORD | original INT 16h |
36h | DWORD | original INT 17h |
3Ah | DWORD | original INT 21h |
3Eh | DWORD | original INT 28h |
42h | WORD | offset of TAME INT 10h handler |
44h | WORD | offset of TAME INT 14h handler |
46h | WORD | offset of TAME INT 15h handler |
48h | WORD | offset of TAME INT 16h handler |
4Ah | WORD | offset of TAME INT 17h handler |
4Ch | WORD | offset of TAME INT 21h handler |
4Eh | WORD | offset of TAME INT 28h handler |
50h | WORD | X in /max:X,Y or /freq:X,Y |
52h | WORD | Y in /max:X,Y or /freq:X,Y |
54h | WORD | number of polls remaining before next task switch |
56h | WORD | /KEYIDLE value |
58h | 4 BYTEs | ??? |
5Ch | WORD | X in /boost:X,Y |
5Eh | WORD | Y in /boost:X,Y |
60h | WORD | /FG: value |
62h | WORD | task switches left until next FGONLY DESQview API call |
64h | WORD | multitasker version ??? |
66h | WORD | virtual screen segment |
68h | BYTE | flags for interrupts already grabbed by TAME bit 0: INT 10h bit 1: INT 14h bit 2: INT 15h bit 3: INT 16h bit 4: INT 17h bit 5: INT 21h bit 6: INT 28h |
69h | BYTE | flags for interrupts which may be acted on (same bits as above) |
6Ah | BYTE | window or task number for this task |
6Bh | BYTE | multitasker type 01h DESQview 02h DoubleDOS 03h TopView 04h OmniView 05h VM/386 |
6Ch | BYTE | type of task switching selected (bit flags) bit 0: DESQview bit 1: DoubleDOS bit 2: TopView bit 3: OmniView bit 4: KeySwitch bit 5: HLT instruction |
6Dh | BYTE | watch_DOS |
6Eh | BYTE | bit flags bit 0: TAME enabled bit 1: /FREQ instead of /MAX (counts in 50h and 52h per tick) bit 2: /TIMEPOLL bit 3: /KEYPOLL bit 4: inhibit timer bit 5: enable status monitoring |
6Fh | BYTE | old status |
70h | WORD |
AX = 2B44h ('D') BX = 4D41h ('MA') CX = 7063h ('pc') DX = 4157h ('AW')
Return: AX = 4F4Bh ('OK') if large host resident = 6F6Bh ('ok') if small host resident CX:DX -> API entry point
SeeAlso: INT 16/AH=79h
Call API entry point with: AX = 0000h get pcANYWHERE IV version DS:SI -> BYTE buffer for host type code Return: AH = version number AL = revision number DS:DI buffer byte filled with 00h full-featured host 01h limited-feature LAN host other API may not be supported AX = 0001h initialize operation DS:SI -> initialization request structure (see below) Return: AX = function status (see below) AX = 0002h get status Return: AH = current operating mode (see init req structure below) AL = current connection status bit 0: a physical connection is active bit 1: remove screen updating is active bit 2: connection checking is active bit 3: hot key detection is active bit 4: background file transfer is active AX = 0003h suspend remote screen updates Return: AX = function status (see below) AX = 0004h resume screen updates Return: AX = function status (see below) AX = 0005h end current remote access session DS:SI -> termination request structure (see below) Return: AX = function status (see below) AX = 0006h remove pcANYWHERE IV from memory Return: AX = status 0000h successful FFD2h unable to release allocated memory FFD1h unable to release interrupt vectors AX = 8000h read data from communications channel DS:BX -> buffer CX = buffer size Return: AX >= number of characters read/available AX < 0 on error AX = 8001h write data to communications channel DS:BX -> buffer CX = buffer size Return: AX >= number of characters written AX < 0 on error AX = 8002h get connection status Return: AX = status > 0000h if connection active = 0000h if connection lost < 0000h on error
Offset | Size | Description |
---|---|---|
00h | BYTE | operating mode: 00h wait for a call 01h hot key activates 02h incoming call activates 03h initiate a call |
01h | 3 BYTEs | user ID to append to config file names |
04h | WORD | DS-relative pointer to path for config files |
06h | WORD | DS-relative pointer to path for program files |
Offset | Size | Description |
---|---|---|
00h | BYTE | operating mode after termination: 00h wait for a call 01h hot key activates 02h incoming call activates 80h use current mode FFh remove from memory |
0000h | function completed successfully |
FFF2h | unable to establish a connection when operating mode is “Initiate a call” |
FFF3h | modem configuration is invalid (corrupt config) |
FFF4h | modem initialization failed (no modem response) |
FFF5h | the communications device could not be initialized |
FFF6h | the host operator aborted the function |
FFF7h | the communications driver type specified in the configuration file is different than the one loaded when pcANYWHERE IV was initially started |
FFF9h | the configuration file is invalid |
FFFAh | the configuration file could not be found |
FFFBh | no session is active |
FFFCh | a remote access session is active |
FFFDh | the specified operating mode is invalid |
AH = 2Ch
Return: CH = hour CL = minute DH = second DL = 1/100 seconds
on most systems, the resolution of the system clock is about 5/100sec, so returned times generally do not increment by 1
on some systems, DL may always return 00h
SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh SeeAlso: INT 2F/AX=120Dh
AH = 2Dh CH = hour CL = minute DH = second DL = 1/100 seconds
Return: AL = result
00h successful FFh invalid time, system time unchanged
</code>
DOS 3.3+ also sets CMOS clock
SeeAlso: AH=2Bh“DOS”,AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh“AT&T”
AH = 2Eh DL = 00h (DOS 1.x/2.x only) AL = new state of verify flag 00h off 01h on
default state at system boot is OFF
when ON, all disk writes are verified provided the device driver supports read-after-write verification
SeeAlso: AH=54h
AH = 2Fh
Return: ES:BX -> current DTA
SeeAlso: AH=1Ah
AH = 30h ---DOS 5.0--- AL = what to return in BH 00h OEM number (as for DOS 2.0-4.0x) 01h version flag
Return: AL = major version number (00h if DOS 1.x) AH = minor version number BL:CX = 24-bit user serial number (most versions do not use this) ---if DOS <5 or AL=00h--- BH = OEM number 00h IBM 05h Zenith 16h DEC 23h Olivetti 29h Toshiba 4Dh Hewlett-Packard 99h STARLITE architecture (OEM DOS, NETWORK DOS, SMP DOS) FFh Microsoft, Phoenix ---if DOS 5.0 and AL=01h--- BH = version flag 08h DOS is in ROM 10h DOS is in HMA
the OS/2 v1.x Compatibility Box returns major version 0Ah
the OS/2 v2.x Compatibility Box returns major version 14h
DOS 4.01 and 4.02 identify themselves as version 4.00
generic MSDOS 3.30, Compaq MSDOS 3.31, and others identify themselves as PC-DOS by returning OEM number 00h
the version returned under DOS 4.0x may be modified by entries in the special program list (see AH=52h)
the version returned under DOS 5.0 may be modified by SETVER; use AX=3306h to get the true version number
SeeAlso: AX=3306h,INT 2F/AX=122Fh
AH = 30h EAX = 00003000h EBX = 50484152h ("PHAR")
Return: AL = major DOS version
AH = minor DOS version EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed BL = ASCII major version number EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed EDX = address of GDA
SeeAlso: AX=2501h,AX=FF00h
AH = 30h DX = ABCDh
Return: DX = DCBAh if installed SeeAlso: AX=0D20h,AX=30F1h
AX = 3000h
Return: AL >= 03h if INT 2F handler installed
SeeAlso: INT 2F/AX=AB00h,INT 7B“Btrieve”,INT 7F/AX=0200h
AX = 3000h BX = 1234h DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
Return: AL = DOS major version AH = DOS minor version CX:BX -> Ctask global data block
if first eight bytes of returned data block equal eight bytes passed in, CTask is resident
CTask is a multitasking kernel for C written by Thomas Wagner
AX = 30F1h
Return: AL = 00h if resident
SeeAlso: AH=30h/DX=ABCDh,AX=330Fh
AH = 31h AL = return code DX = number of paragraphs to keep resident
Return: never
the value in DX only affects the memory block containing the PSP; additional memory allocated via AH=48h is not affected
the minimum number of paragraphs which will remain resident is 11h for DOS 2.x and 06h for DOS 3+
most TSRs can save some memory by releasing their environment block before terminating (see AH=26h,AH=49h)
SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
AH = 32h DL = drive number (00h = default, 01h = A:, etc)
Return: AL = status 00h successful DS:BX -> Drive Parameter Block (DPB) for specified drive FFh invalid or network drive
the OS/2 compatibility box supports the DOS 3.3 version of this call except for the DWORD at offset 12h
this call updates the DPB by reading the disk; the DPB may be accessed via the DOS list of lists (see AH=52h) if disk access is not desirable.
documented for DOS 5.0, but undocumented in prior versions
SeeAlso: AH=1Fh,AH=52h
Offset Size Description 00h BYTE drive number (00h = A:, 01h = B:, etc) 01h BYTE unit number within device driver 02h WORD bytes per sector 04h BYTE highest sector number within a cluster 05h BYTE shift count to convert clusters into sectors 06h WORD number of reserved sectors at beginning of drive 08h BYTE number of FATs 09h WORD number of root directory entries 0Bh WORD number of first sector containing user data 0Dh WORD highest cluster number (number of data clusters + 1) 0Fh BYTE number of sectors per FAT 10h WORD sector number of first directory sector 12h DWORD address of device driver header 16h BYTE media ID byte 17h BYTE 00h if disk accessed, FFh if not 18h DWORD pointer to next DPB —DOS 2.x— 1Ch WORD cluster containing start of current directory, 0000h=root,
FFFFh = unknown
1Eh 64 BYTEs ASCIZ pathname of current directory for drive —DOS 3.x— 1Ch WORD cluster at which to start search for free space when writing 1Eh WORD number of free clusters on drive, FFFFh = unknown —DOS 4.0-5.0— 0Fh WORD number of sectors per FAT 11h WORD sector number of first directory sector 13h DWORD address of device driver header 17h BYTE media ID byte 18h BYTE 00h if disk accessed, FFh if not 19h DWORD pointer to next DPB 1Dh WORD cluster at which to start search for free space when writing 1Fh WORD number of free clusters on drive, FFFFh = unknown
AH = 33h AL = subfunction 00h get current extended break state Return: DL = current state, 00h = off, 01h = on 01h set state of extended ^C/^Break checking DL = 00h off, check only on character I/O functions 01h on, check on all DOS functions
under DOS 3.1+, this function does not use any of the DOS-internal and may thus be called at any time
SeeAlso: AX=3302h
AX = 3302h DL = new state 00h for OFF or 01h for ON
Return: DL = old state of extended BREAK checking
this function does not use any of the DOS-internal stacks and may thus be called at any time
SeeAlso: AH=33h
AX = 3305h
Return: DL = boot drive (1=A:,...)
fully reentrant
NEC 9800-series PCs always call the boot drive A: and assign the other drive letters sequentially to the other drives in the system
AX = 3306h
Return: BL = major version BH = minor version DL = revision (bits 2-0, all others 0) DH = version flags bit 3: DOS is in ROM bit 4: DOS in in HMA
Notes: this function always returns the true version number, unlike AH=30h, whose return value may be changed with SETVER
because of the conflict from the CBIS PowerLAN redirector (see next entry), programs should check whether BH is less than 100 (64h) and BL is at least 5 before accepting the returned BX as the true version number; however, even this is not entirely reliable when that redirector is loaded
fully reentrant
DR-DOS 5.0 returns CF set/AX=0001h for INT 21/AH=33h subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh for invalid subfunctions
SeeAlso: AH=30h
AX = 3306h
Return: AX = 3306h BL = ??? (usually 00h) BH = ??? (usually 00h or FFh)
unknown function, is in conflict with DOS 5.0 version call
SeeAlso: AX=3306h“DOS”
AX = 330Fh
Return: AL = 0Fh if resident (DOS returns AL=FFh)
SeeAlso: AX=30F1h,AX=33E0h
AX = 33E0h
Return: AL = E0h if resident (DOS returns AL=FFh)
SeeAlso: AX=330Fh,AX=357Fh
AH = 34h
Return: ES:BX -> one-byte InDOS flag
the value of InDOS is incremented whenever an INT 21 function begins and decremented whenever one completes during an INT 28 call, it is safe to call some INT 21 functions even though InDOS may be 01h instead of zero
InDOS alone is not sufficient for determining when it is safe to enter DOS, as the critical error handling decrements InDOS and increments the critical error flag for the duration of the critical error. Thus, it is possible for InDOS to be zero even if DOS is busy.
the critical error flag is the byte immediately following InDOS in DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ (except COMPAQ DOS 3.0, where the critical error flag is located 1AAh bytes BEFORE the critical section flag)
For DOS 3.1+, an undocumented call exists to get the address of the critical error flag (see AX=5D06h)
SeeAlso: AX=5D06h,AX=5D0Bh,INT 28
AH = 35h AL = interrupt number
Return: ES:BX -> current interrupt handler
SeeAlso: AH=25h,AX=2503h
AX = 357Fh
Return: DX = FFFFh if installed
SeeAlso: AX=33E0h,AX=3DFFh
AH = 36h DL = drive number (00h = default, 01h = A:, etc)
Return: AX = FFFFh if invalid drive else AX = sectors per cluster BX = number of free clusters CX = bytes per sector DX = total clusters on drive
free space on drive in bytes is AX * BX * CX
total space on drive in bytes is AX * CX * DX
“lost clusters” are considered to be in use
according to Dave Williams' MSDOS reference, the value in DX is incorrect for non-default drives after ASSIGN is run
SeeAlso: AH=1Bh,AH=1Ch
AX = 3700h
Return: AL = status
00h successful DL = current switch character FFh unsupported subfunction
Desc: Determine the character which is used to introduce command switches.
This setting is ignored by DOS commands in version 4.0 and higher, but is honored by many third-party programs.
Notes: documented in some OEM versions of some releases of DOS
supported by OS/2 compatibility box always returns DL=2Fh for DOS 5.0
SeeAlso: AX=3701h
AX = 3701h DL = new switch character
Return: AL = status
00h successful FFh unsupported subfunction
Notes: documented in some OEM versions of some releases of DOS
supported by OS/2 compatibility box ignored by DOS 5.0
SeeAlso: AX=3700h
AH = 37h AL = subfunction 02h get availdev flag Return: DL = 00h \DEV\ must precede character device names = nonzero \DEV\ is optional 03h set availdev flag DL = 00h \DEV\ is mandatory = nonzero \DEV\ is optional
Return: AL = status
00h successful FFh unsupported subfunction
Notes: all versions of DOS from 2.00 allow \DEV\ to be prepended to device
names without generating an error even if the directory \DEV does not actually exist (other paths generate an error if they do not exist). although DOS 3.3+ accepts these calls, they have no effect, and AL=02h always returns DL=FFh
AH = 38h
–DOS 2.x–
AL = 00h get current-country info DS:DX -> buffer for returned info (see below)
Return: CF set on error
AX = error code (02h) CF clear if successful AX = country code (MSDOS 2.11 only) buffer at DS:DX filled
–DOS 3+–
AL = 00h for current country AL = 01h thru 0FEh for specific country with code <255 AL = 0FFh for specific country with code >= 255 BX = 16-bit country code DS:DX -> buffer for returned info (see below)
Return: CF set on error
AX = error code (02h) CF clear if successful BX = country code DS:DX buffer filled
SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
Format of PCDOS 2.x country info: Offset Size Description 00h WORD date format 0 = USA mm dd yy
1 = Europe dd mm yy 2 = Japan yy mm dd
02h BYTE currency symbol 03h BYTE 00h 04h BYTE thousands separator char 05h BYTE 00h 06h BYTE decimal separator char 07h BYTE 00h 08h 24 BYTEs reserved
Format of MSDOS 2.x,DOS 3+ country info: Offset Size Description 00h WORD date format (see above) 02h 5 BYTEs ASCIZ currency symbol string 07h 2 BYTEs ASCIZ thousands separator 09h 2 BYTEs ASCIZ decimal separator 0Bh 2 BYTEs ASCIZ date separator 0Dh 2 BYTEs ASCIZ time separator 0Fh BYTE currency format
bit 2 = set if currency symbol replaces decimal point bit 1 = number of spaces between value and currency symbol bit 0 = 0 if currency symbol precedes value 1 if currency symbol follows value
10h BYTE number of digits after decimal in currency 11h BYTE time format
bit 0 = 0 if 12-hour clock 1 if 24-hour clock
12h DWORD address of case map routine
(FAR CALL, AL = character to map to upper case [>= 80h])
16h 2 BYTEs ASCIZ data-list separator 18h 10 BYTEs reserved
Values for country code: 001h United States 002h Canadian-French 003h Latin America 01Fh Netherlands 020h Belgium 021h France 022h Spain 024h Hungary (not supported by DR-DOS 5.0) 026h Yugoslavia (not supported by DR-DOS 5.0) 027h Italy 029h Switzerland 02Ah Czechoslovakia (not supported by DR-DOS 5.0) 02Bh Austria (DR-DOS 5.0) 02Ch United Kingdom 02Dh Denmark 02Eh Sweden 02Fh Norway 030h Poland (not supported by DR-DOS 5.0) 031h Germany 037h Brazil (not supported by DR-DOS 5.0) 03Dh International English [Australia in DR-DOS 5.0] 051h Japan (DR-DOS 5.0) 052h Korea (DR-DOS 5.0) 15Fh Portugal 166h Finland 311h Middle East (DR-DOS 5.0) 3CCh Israel (DR-DOS 5.0)
AH = 38h AL = 01h thru 0FEh for specific country with code <255 AL = FFh for specific country with code >= 255 BX = 16-bit country code DX = FFFFh
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
Note: not supported by OS/2 SeeAlso: INT 2F/AX=1403h
AH = 39h DS:DX -> ASCIZ pathname
Return: CF clear if successful
AX destroyed CF set on error AX = error code (03h,05h) (see AH=59h)
Notes: all directories in the given path except the last must exist
fails if the parent directory is the root and is full DOS 2.x-3.3 allow the creation of a directory sufficiently deep that it is not possible to make that directory the current directory because the path would exceed 64 characters
SeeAlso: AH=3Ah,AH=3Bh,INT 2F/AX=1103h
AH = 3Ah DS:DX -> ASCIZ pathname of directory to be removed
Return: CF clear if successful
AX destroyed CF set on error AX = error code (03h,05h,06h,10h) (see AH=59h)
Note: directory must be empty (contain only '.' and '..' entries) SeeAlso: AH=39h,AH=3Bh,INT 2F/AX=1101h
AH = 3Bh DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
Return: CF clear if successful
AX destroyed CF set on error AX = error code (03h) (see AH=59h)
Notes: if new directory name includes a drive letter, the default drive is
not changed, only the current directory on that drive changing the current directory also changes the directory in which FCB file calls operate
SeeAlso: AH=47h,INT 2F/AX=1105h
AH = 3CH CX = file attribute bit 0: read-only 1: hidden 2: system 3: volume label (ignored) 4: reserved, must be zero (directory) 5: archive bit 7: if set, file is shareable under Novell NetWare DS:DX -> ASCIZ filename
Return: CF clear if successful AX = file handle CF set on error AX = error code (03h,04h,05h) (see AH=59h)
if a file with the given name exists, it is truncated to zero length
SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh
AH = 3Dh AL = access and sharing modes bits 2-0: access mode 000 read only 001 write only 010 read/write bit 3: reserved (0) bits 6-4: sharing mode (DOS 3+) 000 compatibility mode 001 "DENYALL" prohibit both read and write access by others 010 "DENYWRITE" prohibit write access by others 011 "DENYREAD" prohibit read access by others 100 "DENYNONE" allow full access by others bit 7: inheritance if set, file is private to current process and will not be inherited by child processes DS:DX -> ASCIZ filename CL = attribute mask of files to look for (server call only)
Return: CF clear if successful AX = file handle CF set on error AX = error code (01h,02h,03h,04h,05h,0Ch) (see AH=59h)
file pointer is set to start of file
file handles which are inherited from a parent also inherit sharing and access restrictions
files may be opened even if given the hidden or system attributes
SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1226h
File sharing behavior:
Second and subsequent Opens | ||||||||||||||||
First Open | Compat | Deny All | Deny Write | Deny Read | Deny None | |||||||||||
R | W | RW | R | W | RW | R | W | RW | R | W | RW | R | W | RW | ||
Compat | R | Y | Y | Y | N | N | N | 1 | N | N | N | N | N | 1 | N | N |
W | Y | Y | Y | N | N | N | N | N | N | N | N | N | N | N | N | |
RW | Y | Y | Y | N | N | N | N | N | N | N | N | N | N | N | N | |
Deny All | R | C | C | C | N | N | N | N | N | N | N | N | N | N | N | N |
W | C | C | C | N | N | N | N | N | N | N | N | N | N | N | N | |
RW | C | C | C | N | N | N | N | N | N | N | N | N | N | N | N | |
Deny Write | R | 2 | C | C | N | N | N | Y | N | N | N | N | N | Y | N | N |
W | C | C | C | N | N | N | N | N | N | Y | N | N | Y | N | N | |
RW | C | C | C | N | N | N | N | N | N | N | N | N | Y | N | N | |
Deny Read | R | C | C | C | N | N | N | N | Y | N | N | N | N | N | Y | N |
W | C | C | C | N | N | N | N | N | N | N | Y | N | N | Y | N | |
RW | C | C | C | N | N | N | N | N | N | N | N | N | N | Y | N | |
Deny None | R | 2 | C | C | N | N | N | Y | Y | Y | N | N | N | Y | Y | Y |
W | C | C | C | N | N | N | N | N | N | Y | Y | Y | Y | Y | Y | |
RW | C | C | C | N | N | N | N | N | N | N | N | N | Y | Y | Y |
Legend:
Y = open succeeds, N = open fails with error code 05h C = open fails, INT 24 generated 1 = open succeeds if file read-only, else fails with error code 2 = open succeeds if file read-only, else fails with INT 24
AX = 3DFFh
Return: AX = 4A44h if resident SeeAlso: AX=357Fh,AX=4203h
AH = 3Eh BX = file handle
Return: CF clear if successful AX destroyed CF set on error AX = error code (06h) (see AH=59h)
if the file was written to, any pending disk writes are performed, the time and date stamps are set to the current time, and the directory entry is updated
SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
AH = 3Fh BX = file handle CX = number of bytes to read DS:DX -> buffer for data
Return: CF clear if successful AX = number of bytes actually read (0 if at EOF before call) CF set on error AX = error code (05h,06h) (see AH=59h)
data is read beginning at current file position, and the file position is updated after a successful read
the returned AX may be smaller than the request in CX if a partial read occurred
if reading from CON, read stops at first CR
SeeAlso: AH=27h,AH=40h,INT 2F/AX=1108h,INT 2F/AX=1229h
AH = 3Fh BX = handle for character device "TDHDEBUG" CX = number of bytes to read DS:DX -> buffer for status block (see below)
Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (05h,06h) (see AH=59h)
SeeAlso: AH=40h“Turbo Debug”
Format of status block:
Offset | Size | Description |
---|---|---|
00h | BYTE | status of command |
00h successful | ||
01h invalid handle | ||
02h no more breakpoints available | ||
03h hardware does not support specified breakpoint type | ||
04h previous command prevents execution | ||
05h debugger hardware not found | ||
06h hardware failure | ||
07h invalid command | ||
08h driver not initialized yet | ||
FEh recursive entry (hardware breakpoint inside hw bp handler) | ||
—status for command 01h— | ||
01h | WORD | device driver interface version number (currently 1) |
03h | WORD | device driver software version |
05h | BYTE | maximum simultaneous hardware breakpoints |
06h | BYTE | configuration bits * 0: CPU and DMA accesses are distinct * 1: can detect DMA transfers * 2: supports data mask * 3: hardware pass counter on breakpoints * 4: can match on data as well as addresses |
07h | BYTE | supported breakpoint types * 0: memory read * 1 : memory write * 2: memory read/write * 3: I/O read * 4: I/O write * 5: I/O read/write * 6: instruction fetch |
08h | WORD | supported addressing match modes * 0: any address * 1: equal to test value * 2: not equal * 3: above test value * 4: below test value * 5: below or equal * 6: above or equal * 7: within range * 8: outside range |
0Ah | WORD | supported data matches * 0: any data * 1: equal to test value * 2: not equal * 3: above test value * 4: below test value * 5: below or equal * 6: above or equal * 7: within range * 8: outside range |
0Ch | BYTE | maximum data match length (01h, 02h, or 04h) |
0Dh | WORD | size of onboard memory (in K) |
0Fh | WORD | maximum number of trace-back events |
11h | WORD | hardware breakpoint enable byte address segment (0000h if not supported) |
—status for command 04h— | ||
01h | BYTE | handle to use when referring to the just-set breakpoint |
AH = 3Fh BX = handle for character device "$IPCUST" CX = number of bytes to read DS:DX -> buffer for configuration data (see below)
Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (05h,06h) (see AH=59h)
if less than the entire data is read or written, the next read/write continues where the previous one ended; IOCTL calls AX=4402h and AX=4403h both reset the location at which the next operation starts to zero
the data pointer is also reset to zero if the previous read or write reached or exceeded the end of the data, when the current function is read and the previous was write, or vice versa
SeeAlso: AH=40h“IPCUST”,AX=4402h“IPCUST”
Format of configuration data:
Offset | Size | Description |
---|---|---|
00h | 12 BYTEs | IPCUST.SYS device driver header |
12h | BYTE | ??? |
13h | BYTE | ??? |
14h | WORD | ??? |
16h | BYTE | bit flags bit 0: send BS rather than DEL for BackSpace key bit 1: wrap long lines |
17h | BYTE | ??? |
18h | 64 BYTEs | ASCIZ hostname |
58h | 64 BYTEs | ASCIZ domain name (fully qualified domain name is hostname.domain-name) |
98h | 16 BYTEs | ASCIZ username |
A8h | 64 BYTEs | ASCIZ full name |
E8h | 64 BYTEs | ASCIZ office address |
128h | 32 BYTEs | ASCIZ phone number |
148h | WORD | offset from GMT in minutes |
14Ah | 4 BYTEs | ASCIZ timezone name |
14Eh | WORD | number of time servers |
150h | ? DWORDs | IP addresses for time servers (big-endian) |
??? | ||
164h | WORD | number of old-style name servers |
166h | 3 DWORDs | IP addresses for name servers (big-endian) |
172h | WORD | number of domain name servers |
174h | 3 DWORDs | IP addresses for domain name servers (big-endian) |
180h | DWORD | IP address of default gateway (big-endian) |
184h | DWORD | IP address of log server (big-endian) |
188h | DWORD | IP address of cookie server (big-endian) |
18Ch | DWORD | IP address of lpr server (big-endian) |
190h | DWORD | IP address of imagen print server |
194h | 54 BYTEs | ??? |
1E8h | WORD | TCP default window size in bytes |
1EAh | WORD | TCP low window size |
1ECh | 64 BYTEs | ASCIZ host tabel filename |
22Ch | 2 BYTEs | ??? |
22Eh | 80 BYTEs | ASCIZ mail relay host name |
27Eh | BYTE | ??? |
27Fh | BYTE | ??? bit flags |
280h | 44 BYTEs | ??? |
2ACh | WORD | ??? |
2AEh | 202 BYTEs | ??? |
AH = 40h BX = file handle 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 (05h,06h) (see AH=59h)
if CX is zero, no data is written, and the file is truncated or extended to the current position
data is written beginning at current file position, and the file position is updated after a successful write
the usual cause for AX < CX on return is a full disk
SeeAlso: AH=28h,AH=3Fh,INT 2F/AX=1109h
AH = 40h BX = handle for character device "TDHDEBUG" CX = number of bytes to write DS:DX -> hardware breakpoint command (see below)
Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (05h,06h) (see AH=59h)
results are retrieved by reading from the device
SeeAlso: AH=3Fh“Turbo Debug”
Format of hardware breakpoint commands:
Offset | Size | Description |
---|---|---|
00h | BYTE | command code |
00h install interrupt vectors | ||
01h get hardware capabilities | ||
02h enable hardware breakpoints | ||
03h disable hardware breakpoints | ||
04h set hardware breakpoint | ||
05h clear hardware breakpoint | ||
06h set I/O base address and reset hardware | ||
07h restore interrupt vectors | ||
—command code 00h— | ||
01h | DWORD | pointer to Turbo Debugger entry point to be jumped to on hardware breakpoint; call with CPU state the same as on the breakpoint except for pushing AX and placing an entry code (FFh if breakout button or breakpoint handle) in AH |
—command code 04h— | ||
01h | BYTE | breakpoint type: 00h memory read 01h memory write 02h memory read/write 03h I/O read\\04h I/O write 05h I/O read/write 06h instruction fetch |
02h | BYTE | address matching mode: 00h any address 01h equal to test value 02h different from test value 03h above test value 04h below test value 05h below or equal to test value 06h above or equal to test value 07h within inclusive range 08h outside specified range |
03h | DWORD | 32-bit linear low address |
07h | DWORD | 32-bit linear high address |
0Bh | WORD | pass count |
0Dh | BYTE | data size (01h, 02h, or 04h) |
0Eh | BYTE | source of matched bus cycle 01h CPU 02h DMA 03h either |
0Fh | BYTE | data-matching mode 00h match any 01h equal to test value 02h different from test value 03h above test value 04h below test value 05h below or equal to test value 06h above or equal to test value 07h within specified range 08h outside specified range |
10h | DWORD | low data value |
14h | DWORD | high data value |
18h | DWORD | data mask specifying which bits of the data are tested |
—command code 05h— | ||
01h | BYTE | handle of breakpoint to clear (breakpoint returned from command 04h) |
—command code 06h— | ||
01h | WORD |
AH = 40h BX = handle for character device "$IPCUST" CX = number of bytes to write DS:DX -> buffer for configuration data (AH=3Fh"IPCUST")
Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (05h,06h) (see AH=59h)
if less than the entire data is read or written, the next read/write continues where the previous one ended; IOCTL calls AX=4402h and AX=4403h both reset the location at which the next operation starts to zero
the data pointer is also reset to zero if the previous read or write reached or exceeded the end of the data, when the current function is read and the previous was write, or vice versa
SeeAlso: AH=3Fh“IPCUST”,AX=4402h“IPCUST”
AX = 4000h BX = 0002h CX = 0000h DS:DX = 0000h:0000h
Return: CF clear if installed AX = CS of resident code
FARTBELL is a joke program by Guenther Thiele which makes various noises when programs output a bell
SeeAlso: AX=4001h
AX = 4001h BX = 0002h CX = 0000h DS:DX = 0000h:0000h
FARTBELL is a joke program by Guenther Thiele which makes various noises when programs output a bell
SeeAlso: AX=4000h
AH = 41h DS:DX -> ASCIZ filename (no wildcards, but see below) CL = attribute mask for deletion (server call only, see below)
Return: CF clear if successful AX destroyed (DOS 3.3) AL seems to be drive of deleted file CF set on error AX = error code (02h,03h,05h) (see AH=59h)
(DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case the filespec must be canonical (as returned by AH=60h), and only files matching the attribute mask in CL are deleted
DOS does not erase the file's data; it merely becomes inaccessible because the FAT chain for the file is cleared
deleting a file which is currently open may lead to filesystem corruption. Unless SHARE is loaded, DOS does not close the handles referencing the deleted file, thus allowing writes to a nonexistant file.
SeeAlso: AH=13h,AX=4301h,AX=5D00h,AH=60h,INT 2F/AX=1113h
AX = 4101h DX = FFFEh
Return: AX = 0000h if installed
Note: resident code sets several internal variables on this call
AH = 42h AL = origin of move 00h start of file 01h current file position 02h end of file BX = file handle CX:DX = offset from origin of new file position
Return: CF clear if successful DX:AX = new file position in bytes from start of file CF set on error AX = error code (01h,06h) (see AH=59h)
for origins 01h and 02h, the pointer may be positioned before the start of the file; no error is returned in that case, but subsequent attempts at I/O will produce errors
if the new position is beyond the current end of file, the file will be extended by the next write (see AH=40h)
SeeAlso: AH=24h,INT 2F/AX=1228h
AX = 4203h
Return: AX = 1234h if resident
SeeAlso: AX=3DFFh,AX=4243h
AX = 4243h
Return: AX = 5678h if resident
SeeAlso: AX=4203h,AX=4B04h
AX = 4300h DS:DX -> ASCIZ filename
Return: CF clear if successful CX = attributes (see AX=4301h) AX = CX (DR-DOS 5.0) CF set on error AX = error code (01h,02h,03h,05h) (see AH=59h)
SeeAlso: AX=4301h,AH=B6h,INT 2F/AX=110Fh
AX = 4301h CX = new attributes bit 8: shareable (Novell NetWare) 7: unused 6: unused 5: archive 4: directory 3: volume label 2: system 1: hidden 0: read-only DS:DX -> ASCIZ filename
Return: CF clear if successful AX destroyed CF set on error AX = error code (01h,02h,03h,05h) (see AH=59h)
will not change volume label or directory attribute bits, but will change the other attribute bits of a directory (the directory bit must be cleared to successfully change the other attributes of a directory, but the directory will not be changed to a normal file as a result)
MSDOS 4.01 reportedly closes the file if it is currently open
SeeAlso: AX=4300h,INT 2F/AX=110Eh
AX = 4302h DS:DX -> ASCIZ pathname
Return: CF clear if successful CX = access rights bit 0 delete requires password bit 2 write requires password bit 3 read requires password bits 4-7=equal to bits 0-3 bits 8-11=equal to bits 0-3 AX = CX (DR-DOS 5.0) CF set on error AX = error code <code> <WRAP round box> Determine which operations the calling program may perform on a specified file without being required to provide a password. </WRAP> SeeAlso: AX=4303h ==== 4303h - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD ==== <code> AX = 4303h CX = access rights bit 0 delete requires password bit 2 write requires password bit 3 read requires password bits 4-7=equal to bits 0-3 bits 8-11=equal to bits 0-3 bit 15 new password is to be set DS:DX -> ASCIZ pathname [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
Return: CF clear if successful CF set on error AX = error code
if the file is already protected, the old password must be added after the pathname, separated by a “;”
SeeAlso: AX=4302h,AX=4454h
AX = 4304h ???
Return: CF clear if successful CX = AX = ??? CF set on error AX = error code (see AH=59h)
SeeAlso: AX=4305h
AX = 4305h ???
Return: CF clear if successful CF set on error AX = error code (see AH=59h) /code> SeeAlso: AX=4304h ===== 4400h - DOS 2+ - IOCTL - GET DEVICE INFORMATION ===== <code> AX = 4400h BX = handle
Return: CF clear if successful DX = device information word character device 14: device driver can process IOCTL requests (see AX=4402h) 13: output until busy supported 11: driver supports OPEN/CLOSE calls 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+) 14: don't set file date/time on closing (DOS 3+) 11: media not removable 8: (DOS 4+) generate INT 24 if no disk space on write 7: clear (indicates file) 6: file has not been written 5-0: drive number (0 = A:) AX destroyed CF set on error AX = error code (01h,05h,06h) (see AH=59h)
value in DH corresponds to high byte of device driver's attribute word if handle refers to a character device
SeeAlso: AX=4401h,INT 2F/AX=122Bh
AX = 4401h BX = handle (must refer to character device) DX = device information word (see AX=4400h) (DH must be zero)
Return: CF clear if successful CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h)
SeeAlso: AX=4400h,INT 2F/AX=122Bh
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 AH=59h)
Note: format of data is driver-specific (see below for some specific cases) SeeAlso: AX=4400h,AX=4403h,AX=4404h,INT 2F/AX=122Bh
AX = 4402h BX = file handle for device "PROTMAN$" DS:DX -> request block (see below) CX = 000Eh (size of request block)
Offset | Size | Description |
---|---|---|
00h | WORD | 01h |
02h | WORD | returned status (see below) |
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 |
Offset | Size | Description |
---|---|---|
00h | WORD | 02h |
02h | WORD | returned status (see below) |
04h | DWORD | pointer to module's common characteristics table (see below) |
08h | DWORD | pointer to list of modules to which the module is to be bound |
0Ch | WORD | unused |
Offset | Size | Description |
---|---|---|
00h | WORD | 03h |
02h | WORD | returned status (see below) |
04h | DWORD | caller's virtual address in FailingModules structure |
08h | DWORD | unused |
0Ch | WORD | unused |
Offset | Size | Description |
---|---|---|
00h | WORD | 04h |
02h | WORD | returned status (see below) |
04h | DWORD | returned dispatch point |
08h | DWORD | unused |
0Ch | WORD | returned protocol manager DS |
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
Offset | Size | Description |
---|---|---|
00h | WORD | 05h |
02h | WORD | returned status (see below) |
04h | DWORD | pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI |
08h | DWORD | unused |
0Ch | WORD | buffer length |
Offset | Size | Description |
---|---|---|
00h | WORD | 06h |
02h | WORD | returned status (see below) |
04h | DWORD | pointer to structure containing parsed user config file |
08h | DWORD | unused |
0Ch | WORD | length of structure |
Offset | Size | Description |
---|---|---|
00h | WORD | 07h |
02h | WORD | returned status (see below) |
04h | DWORD | unused |
08h | DWORD | poitner to ASCIZ name of the module to be prebind initialized |
0Ch | WORD | unused |
Offset | Size | Description |
---|---|---|
00h | WORD | 08h |
02h | WORD | returned status (see below) |
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 |
Offset | Size | Description |
---|---|---|
00h | WORD | 09h |
02h | WORD | returned status (see below) |
04h | DWORD | must be 0000h:0000h on return, points to root tree |
08h | DWORD | 0000h:0000h |
0Ch | WORD | unused under DOS |
Offset | Size | Description |
---|---|---|
00h | WORD | 0Ah |
02h | WORD | returned status (0000h, 0008h, 002Ch) (see below) |
04h | DWORD | 0000h:0000h |
08h | DWORD | pointer to 16-byte ASCIZ module name |
0Ch | WORD | 0000h |
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 |
Offset | Size | Description |
---|---|---|
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 01h Media Access Control 02h Data link 03h network 04h transport 05h session FFh not specified |
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 00h physical 01h Media Access Control 02h Data link 03h network 04h transport 05h session FFh not specified |
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 0000h:0000h if none |
2Ch | DWORD | pointer to service-specific status 0000h:0000h if none |
30h | DWORD | pointer to upper dispatch table (see below) 0000h:0000h if none |
34h | DWORD | pointer to lower dispatch table (see below) 0000h:0000h if none |
38h | DWORD | reserved, must be 0 |
3Ch | DWORD | reserved, must be 0 |
for compatibility with NDIS 1.x.x, a major version of 00h is interpreted as 01h
Offset | Size | Description |
---|---|---|
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 bit 0: supports broadcast bit 1: supports multicast bit 2: supports functional/group addressing bit 3: supports promiscuous mode bit 4: station address software settable bit 5: statistics always current bit 6: supports InitiateDiagnostics bit 7: supports loopback bit 8: MAC does primarily ReceiveChain indications instead of ReceiveLookahead indications bit 9: supports IBM source routing bit 10: supports MAC reset bit 11: supports Open/Close adapter bit 12: supports interrupt request bit 13: supports source routing bridge bit 14: supports GDT virtual addresses (OS/2 version) bit 15: multiple TransferDatas allowed durign a single indication bit 16: MAC normally sets FrameSize = 0 in ReceiveLookahead bit 17-31: reserved, must be 0 |
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 |
Offset | Size | Description |
---|---|---|
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 |
Offset | Size | Description |
---|---|---|
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 bits 0-2: * 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 bit 3: MAC bound bit 4: MAC open bit 5: diagnostics in progress bits 6-31: reserved |
0Ah | WORD | current packet filter flags bit 0: directed/multicast or group/functional bit 1: broadcast bit 2: promiscuous bit 3: all source routing bit 4-15: reserved, must be zero |
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 |
AX = 4402h BX = handle for character device "GDMS" CX = number of bytes to read (>= 4) DS:DX -> buffer (see below)
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful AX = number of bytes read
Format of returned data: Offset Size Description 00h 4 BYTEs ??? 04h DWORD pointer to ??? 08h 4 BYTEs ???
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 AH=59h) CF clear if successful AX = number of bytes read
Note: LASTBYTE.SYS is part of “The Last Byte” by Key Software Products SeeAlso: AX=4402h“HIGHUMM”
AX = 4402h BX = handle for device "KSP$UMM" CX = 0004h DS:DX -> DWORD to hold entry point
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful AX = number of bytes read
Note: HIGHUMM.SYS is part of “The Last Byte” by Key Software Products SeeAlso: AX=4402h“LASTBYTE”
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
AX = 4402h BX = file handle for device "SMARTAAR" CX = number of bytes to read (min 28h) DS:DX -> buffer for status record (see below)
Return: CF clear if successful
AX = number of bytes actually read CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h)
SeeAlso: AX=4403h“SMARTDRV”,INT 2F/AX=4A10h
Format of SMARTDRV status record: Offset Size Description 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
AX = 4402h BX = file handle referencing character device for CD-ROM driver CX = number of bytes to read DS:DX -> control block (see below)
Return: CF clear if successful
AX = number of bytes actually read CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h)
Note: the data returned depends on the first byte of the control block; the
remainder of the control block is filled by the driver
SeeAlso: AX=4403h“CD-ROM”,INT 2F/AX=0802h
Format of control block: Offset Size Description 00h BYTE 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
—function 00h— 01h DWORD device driver header address (see also AH=52h) —function 01h— 01h BYTE 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
bit 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
—function 07h— 01h BYTE read mode
00h cooked 01h raw
02h WORD sector size in bytes —function 08h— 01h DWORD volume size in sectors —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 track number (set by caller) 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”
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 (see INT 67/AH=3Fh for entry point parameters) CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h)
SeeAlso: AX=4402h“HOOKROM”,INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
AX = 4402h BX = file handle for device "EMMXXXX0" CX = 0006h (size of buffer in bytes) DS:DX -> buffer for ??? first byte must be 01h on entry
Return: CF clear if successful
buffer filled (see INT 67/AH=3Fh function 1B00h) CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h)
Note: this call always returns an error if Windows3 support has been disabled
with the NW3 switch to QEMM386.SYS
SeeAlso: INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
AX = 4402h BX = file handle for device "HOOKROM$" CX = 0004h DS:DX -> DWORD buffer for address of hooked vector table (see below)
Return: CF clear if successful
DS:DX buffer filled CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h)
SeeAlso: AX=4402h“QEMM”
Format of hooked vector table entry: Offset Size Description 00h 5 BYTEs FAR jump to actual interrupt handler (end of table if first byte is not EAh) 05h BYTE interrupt vector number
AX = 4402h BX = file handle for device "SCSIMGR$" CX = 0004h DS:DX -> buffer for function address
Return: CF clear if successful
AX = 0004h CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h)
Note: the function address is called with the address of a SCSI Request
Block on the stack and the caller must clean up the stack
SeeAlso: AX=440Ch“ASPITAPE”,INT 11/AH=FFh“WD7000”
Format of SCSI Request Block (64 bytes): Offset Size Description 00h BYTE request number
00h "HA_INQ" 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
01h BYTE request status
00h not done yet 02h aborted 04h SCSI I/O error 80h invalid 81h no adapter
82h no device attached
else status
02h BYTE host adapter ID 03h BYTE request flags bit 3: ??? 04h DWORD reserved —request 00h— 08h BYTE (returned) number of host adapters 09h BYTE (returned) target adapter ID 0Ah 16 BYTEs (returned) manager ID 1Ah 16 BYTEs (returned) adapter ID 2Ah 16 BYTEs (returned) parameters —request 01h— 08h BYTE target ID 09h BYTE logical unit number 0Ah BYTE (returned) device type 01h streamer —request 02h— 08h BYTE target ID 09h BYTE logical unit number 0Ah DWORD data allocation length 0Eh BYTE sense allocation length 0Fh DWORD data buffer pointer 13h DWORD next request pointer (for linking) 17h BYTE CDB length 18h BYTE (returned) host adapter status 11h select timeout
12h data overrun 13h bus error 14h bus failure
19h BYTE (returned) target status 02h sense data stored in SRB 08h target busy
18h reservation error
1Ah DWORD post routine address 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 (20-24 bytes) —request 04h— 08h BYTE target ID 09h BYTE logical unit number 0Ah 14 BYTEs reserved 18h BYTE (returned) host adapter status (see above) 19h BYTE (returned) target status (see above) 1Ah DWORD post routine address 1Eh 34 BYTEs workspace
Format of CCB: Offset Size Description 00h BYTE command code
01h rewind 05h get block size limits 08h read 0Ah write 10h write file marks 11h SCSI Space (set position?) 12h SCSI Inquire 19h erase 1Bh load/unload media
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
AX = 4402h BX = file handle for device "386MAX$$" CX = 005Ah DS:DX -> 386MAX state buffer (see below)
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 AH=59h)
Notes: the buffer must be one byte larger than the value given in CX; if the
value is less than 5Ah, 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.
SeeAlso: AX=4403h“386MAX”,INT 67/AH=03h,INT 67/AH=3Fh
Format of 386MAX v6.01 state: Offset Size Description 00h BYTE version number of state structure (must be set on entry;
v6.01 returns an error if not 03h)
01h 6 BYTEs signature “386MAX” 07h 4 BYTEs version string “N;NN” (i.e. “6;01” for v6.01) 0Bh WORD segment of low-memory portion of 386MAX.SYS 0Dh 2 BYTEs ??? 0Fh WORD segment of ??? memory block or 0000h 11h WORD bit flags
bit 1: ??? bit 2: ??? bit 3: ??? (cleared by calling INT 67 functions) bit 5: ??? bit 6: 386MAX active??? bit 7: 386MAX is providing EMS services bit 8: ??? bit 9: ??? (see INT 15/AX=2402h) bit 10: ??? bit 11: ??? bit 12: ??? bit 13: QPMS has been used bit 14: ??? bit 15: ???
13h WORD starting address of video memory in K 15h 8 BYTEs ??? 1Dh WORD KBytes extended memory used by 386MAX 1Fh 2 BYTEs ??? 21h WORD ??? 23h WORD IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions 25h WORD IO port to write (OUT DX,AL) to invoke 386MAX API functions 27h WORD ??? 29h 2 BYTEs ??? 2Bh DWORD ??? 2Fh 4 BYTEs ??? 33h WORD system configuration??? flags bit 1: ROM compressed??? bit 3: ???
bit 5: 386MAX loaded into high memory
bit 11: PC/XT (thus only single 8259 interrupt controller
present, DMA only in 1st megabyte, etc)
35h WORD ??? bit flags 37h 4 BYTEs ??? 3Bh WORD segment of first MCB in high memory chain??? 3Dh WORD flags bit 2: no DPMI services bit 11: don't backfill holes in video memory area
bit 12: don't backfill below video memory???
3Fh WORD flags bit 7: ??? 41h WORD flags bit 0: Windows3 support enabled
bit 8: ???
43h 2 BYTEs ??? 45h WORD amount of memory to report available on INT 15/AH=88h 47h 4 BYTEs ??? 4Bh WORD ??? 4Dh 2 BYTEs ??? 4Fh WORD ??? 51h WORD bit flags bit 12: ??? 53h DWORD old INT 21h 57h DWORD pointer to 386MAX's EMS (INT 67h) handler
Format of high memory info record: Offset Size Description 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 ROM shadowing record: Offset Size Description 00h WORD segment of ROM??? 02h WORD segment of ROM??? 04h 2 BYTEs ??? 06h WORD size of shadowed ROM in paragraphs 08h 4 BYTEs ???
Values for 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)
Call 386MAX API (via OUT DX,AL) with:
STACK: WORD value for DX AH = 01h get high memory information ES:DI -> buffer for array of high memory info records (see above) Return: CX = number of records placed in buffer AH = 02h get shadowed ROM info??? ES:DI -> buffer for array of ROM shadowing records (see above) Return: CX = number of records placed in buffer AH = 03h get 386MAX state ES:DI -> 90-byte buffer for state (see above) Return: AH = 00h (successful) buffer filled Note: unlike INT 21/AX=4402h"386MAX", this function omits the first byte specifying the state buffer version AH = 04h get memory types??? ES:DI -> buffer for memory type info (array of bytes, one per 16K page) (see above) Return: CX = number of bytes placed in buffer AH = 05h get ??? AL = subfunction 00h invoke INT 15/AX=2401h first 01h don't invoke INT 15/AX=2401h first CX = number of bytes to copy (0000h for default) SI = ??? ES:DI -> buffer for ??? Return: CX = number of bytes actually copied ??? AH = 06h get memory speed info ES:DI -> buffer for memory speed records (see below) Return: AH = 00h (successful) CX = number of bytes placed in buffer Note: this function can take over a second to execute AH = 07h ??? ??? Return: ??? AH = 08h ??? AL = ??? (00h or nonzero) AH = 09h toggle ??? flags BX = bitmask of bits of ??? flags (word at state+11h) to toggle Return: AH = 00h (successful) Note: invokes INT 15/AX=2401h first AH = 0Ah toggle ??? flags BX = bitmask of bits of ??? (word at state+33h) to toggle Return: AH = 00h (successful) Notes: invokes INT 15/AX=2401h first does ??? if bit 3 on after specified bits are toggled AH = 0Bh toggle ??? flags BX = bitmask of bits of ??? (word at state+35h) to toggle Return: AH = 00h (successful) Note: invokes INT 15/AX=2401h first AH = 0Ch toggle ??? flags BX = bitmask of bits of ??? (word at state+41h) to toggle Return: AH = 00h (successful) Note: invokes INT 15/AX=2401h first AH = 0Dh specify 386MAX high-memory location BX = segment address of high-memory real-mode portion of 386MAX ??? 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 = 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: ??? bit 1: physical address same as linear address bit 2: EMS page frame bit 6: ??? this function can take over a second to execute AH = 12h ??? AL = subfunction 00h ??? 01h ??? ??? Return: AH = 00h (successful) if AL=00h or 01h AH = 8Fh otherwise AH = 13h page protection??? AL = subfunction 00h set all ??? 4K pages to read-only??? 01h set all ??? 4K pages to read-write??? ??? Return: AH = 00h (successful) if AL=00h or 01h AH = 8Fh otherwise 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) 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: calls INT 15/AX=2401h first AH = 1Ah set page table entry??? EDX = new page table entry??? (low word on stack) ESI = linear address of page??? Return: AH = status (00h,8Bh) Note: calls INT 15/AX=2401h first AH = 1Bh get ??? Return: AH = status BX = ??? CX = ??? 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) ??? AH = 1Eh ??? ES:DI -> ??? ??? Return: ??? AH = 1Fh ??? ??? Return: AX = 0000h if successful BX = ??? (0001h for 386MAX v6.01) CL = ??? DL = ??? (5Ah for 386MAX v6.01) DH = ??? (00h for 386MAX v6.01) SI = ??? ES???:DI -> ??? 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 memory speed record: Offset Size Description 00h DWORD page table entry for 4K page 04h WORD number of microticks (840ns units) required for REP LODSD of entire 4K page
AX = 4402h BX = file handle for device "PGS1600$" CX = 0018h (size of buffer) DS:DX -> configuration buffer (see below)
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 AH=59h)
Note: 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 configuration information: Offset Size Description 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
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 AH=59h)
Note: 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
SeeAlso: AH=3Fh“IPCUST”,AH=40h“IPCUST”,AX=4403h“IPCUST” ———-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 AH=59h)
Notes: format of data is driver-specific (see 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
SeeAlso: AX=4400h,AX=4402h,AX=4405h,INT 2F/AX=122Bh,INT 2F/AX=D44Dh SeeAlso: INT 2F/AX=D44Fh ———-214403—————————– INT 21 - SMARTDRV.SYS - IOCTL - CACHE CONTROL
AX = 4403h BX = handle for device "SMARTAAR" CX = number of bytes to write DS:DX -> SMARTDRV control block (see below)
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 AH=59h)
SeeAlso: AX=4402h“SMARTDRV”,INT 2F/AX=4A10h
Format of SMARTDRV control block: Offset Size Description 00h BYTE 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
—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 ———-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 below)
Return: CF clear if successful
AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h)
SeeAlso: AX=4402h“CD-ROM”,INT 2F/AX=0802h
Format of control block: Offset Size Description 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
———-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 below)
Return: CF clear if successful
AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h)
SeeAlso: AX=4405h“ST-01”,INT 78/AH=10h
Format of SCSITAPE control block: Offset Size Description 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 ———-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, 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 CF set on error AX = error code (01h,05h,06h,0Ch,0Dh) (see 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
Format of buffer on return: Offset Size Description 00h 4 BYTEs signature “IABH” —if func 81h— (no additional fields) —if func 82h— 04h DWORD pointer to API entry point (see INT 2F/AX=FBA1h/BX=0082h) —if func 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 ———-214403—————————– INT 21 U - Qualitas 386MAX v6.01 - SET STATE
AX = 4403h BX = handle for device "386MAX$$" CX = number of bytes to copy (up to 5Ah) DS:DX -> 386MAX state buffer (see 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 AH=59h)
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” ———-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 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 AH=59h)
Note: 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” ———-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 AH=59h)
Note: 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
SeeAlso: AH=3Fh“IPCUST”,AH=40h“IPCUST”,AX=4402h“IPCUST” ———-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 AH=59h)
Note: format of data is driver-specific SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh ———-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
Note: In addition to returning the address of the Stacker device driver,
this call also sets the volume number at offset 3Eh in the device driver (see INT 25/AX=CDCDh)
SeeAlso: INT 25/AX=CDCDh ———-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 below)
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 00h WORD 01CDh 02h WORD sector count 04h DWORD number of starting sector 08h DWORD far pointer to Data Buffer ———-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 AH=59h)
Note: format of data is driver-specific SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh ———-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 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 AH=59h)
SeeAlso: AX=4403h“ST-01” ———-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 CF set on error AX = error code (01h,05h,06h,0Dh) (see AH=59h)
Note: files may not register as being at EOF if positioned there by AH=42h SeeAlso: AX=4407h,INT 2F/AX=122Bh ———-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 AH=59h)
Note: for DOS 2+, files are always ready for output, even if the disk is
full or no media is in the drive
SeeAlso: AX=4406h,INT 2F/AX=122Bh ———-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 = 0000h if removable = 0001h if fixed CF set on error AX = error code (01h,0Fh) (see AH=59h)
SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh ———-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 12: drive is remote bit 9: direct I/O not allowed CF set on error AX = error code (01h,0Fh) (see AH=59h)
Note: on local drives, DX bits not listed above are the attribute word from
the device driver header (see AH=52h); for remote drives, the other bits appear to be undefined
SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh ———-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 AH=59h)
Note: if file is remote, Novell Advanced NetWare 2.0 returns the number of
the file server on which the handle is located in CX
SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh ———-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 AH=59h)
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
SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh ———-21440C—————————– INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
AX = 440Ch BX = device handle CH = category code 00h unknown (DOS 3.3+) 01h COMn: (DOS 3.3+) 03h CON (DOS 3.3+) 05h LPTn: 9Eh Media Access Control driver (STARLITE) CL = function 00h MAC driver Bind (STARLITE) 45h set iteration count 4Ah select code page 4Ch start code-page preparation 4Dh end code-page preparation 5Fh set display information (DOS 4.0) 65h get iteration count 6Ah query selected code page 6Bh query prepare list 7Fh get display information (DOS 4.0) DS:DX -> (DOS) parameter block (see below) SI:DI -> (OS/2 comp box) parameter block (see below)
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful DS:DX -> iteration count if CL=65h DS:DX -> (OS/2 comp box) data block
SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=1A01h
Format of parameter block for function 00h: Offset Size Description 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 function 45h: Offset Size Description 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 00h WORD length of data 02h WORD code page ID 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 4Dh: Offset Size Description 00h WORD length of data 02h WORD code page ID
Format of parameter block for function 4Ch: Offset Size Description 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 functions 5Fh and 7Fh: Offset Size Description 00h BYTE level (0 for DOS 4.x and 5.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 to 15 reserved
06h BYTE mode type (1=text, 2=graphics) 07h BYTE reserved (0) 08h WORD colors
0 = 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 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
———-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 below)
Return: CF set on error
AX = error code (see AH=59h) 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 mtop parameter block: Offset Size Description 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 mtget parameter block: Offset Size Description 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
bit 0: device currently opened in buffered mode bit 1: drive currently opened in nonbuffered mode bit 2: rewind drive on last close bit 3: drive has been written on bit 4: drive has been read from bit 5: next read will return 0 bytes bit 6: EOM will resemble EOF bit 7: drive may be busy rewinding
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)
bits 0-7: SCSI operation (SCSI packet byte 0) bits 8-10: SCSI flags (SCSI packet byte 1) bits 11-12: ASPI "Direction Bits" (ASPI SRB byte 3)
0Ch WORD residual bytes from SCSI opcode ———-21440D—————————– INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
AX = 440Dh BL = drive number (00h=default,01h=A:,etc) CH = category code 08h disk drive CL = function 40h set device parameters 41h write logical device track 42h format and verify logical device track 46h (DOS 4+) set volume serial number (see also AH=69h) 47h (DOS 4+) set access flag 60h get device parameters 61h read logical device track 62h verify logical device track 66h (DOS 4+) get volume serial number (see also AH=69h) 67h (DOS 4+) get access flag 68h (DOS 5+) sense media type DS:DX -> (DOS) parameter block (see below) SI:DI -> (OS/2 comp box) parameter block (see below)
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful DS:DX -> data block if CL=60h or CL=61h
Notes: DOS 4.01 seems to ignore the high byte of the number of directory
entries in the BPB for diskettes. functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5.0
SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh
Format of parameter block for functions 40h, 60h: Offset Size Description 00h BYTE special functions
bit 0 set if function to use current BPB, clear if Device BIOS Parameter Block field contains new default BPB bit 1 set if function to use track layout fields only must be clear if CL=60h bit 2 set if all sectors in track same size (should be set) bits 3-7 reserved
01h BYTE device type
00h 320K/360K disk 01h 1.2M disk 02h 720K disk 03h single-density 8-inch disk 04h double-density 8-inch disk 05h fixed disk 06h tape drive 07h (DOS 3.3+) 1.44M floppy 08h read/write optical disk 09h (DOS 5.0) 2.88M floppy 0Ah other type of block device
02h WORD device attributes
bit 0 set if nonremovable medium bit 1 set if door lock supported bits 2-15 reserved
04h WORD number of cylinders 06h BYTE media type
for 1.2M drive 00h 1.2M disk (default) 01h 320K/360K disk always 00h for other drive types
07h 31 BYTEs device BPB (see AH=53h), bytes after BPB offset 1Eh omitted 26h WORD number of sectors per track (start of track layout field)
not used by function 60h
28h N word pairs: number,size of each sector in track
Format of parameter block for functions 41h, 61h: Offset Size Description 00h BYTE special functions (reserved, must be zero) 01h WORD number of disk head 03h WORD number of disk cylinder 05h WORD number of first sector to read/write 07h WORD number of sectors 09h DWORD transfer address
Format of parameter block for functions 42h, 62h: Offset Size Description 00h BYTE reserved, must be zero (DOS <3.2)
bit 0=0: format/verify track 1: format status call (DOS 3.2+) bits 1-7 reserved, must be zero on return (DOS 4.x): bit 0: set if specified tracks, sectors/track supported bit 1: set if function not supported by BIOS bit 2: set if specified tracks, sectors/track not supported bit 3: set if no disk in drive
01h WORD number of disk head 03h WORD number of disk cylinder
Format of parameter block for functions 46h, 66h: Offset Size Description 00h WORD info level (00h) 02h DWORD disk serial number (binary) 06h 11 BYTEs volume label or “NO NAME ” 11h 8 BYTEs filesystem type “FAT12 ” or “FAT16 ” (CL=66h only)
Format of parameter block for functions 47h, 67h: Offset Size Description 00h BYTE special-function field (must be zero) 01h BYTE disk-access flag, nonzero if access allowed by driver
Format of parameter block for function 68h: Offset Size Description 00h BYTE 01h for default media type, 00h for any other media type 01h BYTE 02h for 720K, 07h for 1.44M, 09h for 2.88M ———-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 AH=59h) 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)
SeeAlso: AX=440Fh,INT 2F/AX=122Bh ———-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 AH=59h) CF clear if successful drive now responds to next logical drive number
Note: maps logical drives to physical drives, similar to DOS's treatment of
a single physical floppy drive as both A: and B:
SeeAlso: AX=440Eh,INT 2F/AX=122Bh ———-214410—————————– INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE)
AX = 4410h BX = handle for device CH = category code (see AX=440Ch) CL = function code
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,AX=4411h ———-214410BXFFFF———————– INT 21 U - NewSpace - ENABLE DRIVER
AX = 4410h BX = FFFFh
Notes: NewSpace is a TSR by Isogon Corporation which automatically compresses
all files as they are written and decompresses them as they are read compressed files are not accessible unless the driver is enabled
SeeAlso: AX=4411h/BX=FFFFh ———-214411—————————– INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE)
AX = 4411h BL = drive number CH = category code (see AX=440Dh) CL = function code
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,AX=4410h ———-214411BXFFFF———————– INT 21 U - NewSpace - DISABLE DRIVER
AX = 4411h BX = FFFFh
Notes: NewSpace is a TSR by Isogon Corporation which automatically compresses
all files as they are written and decompresses them as they are read compressed files are not accessible unless the driver is enabled
SeeAlso: AX=4410h/BX=FFFFh ———-214412—————————– INT 21 - DR-DOS 5.0 - DETERMINE DOS TYPE
AX = 4412h CF set
Return: CF set if not DR DOS
AX = error code (see AH=59h) CF clear if DR DOS DX = AX = version code 1060h = ??? 1063h = DR-DOS 3.41 ??? 1065h = DR-DOS 5.0 1067h = DR-DOS 6.0
Note: this call is identical to AX=4452h SeeAlso: AX=4452h ———-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 ———-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 ———-214414—————————– INT 21 U - DR-DOS 5.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 call is identical to AX=4454h SeeAlso: AX=4454h ———-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 ———-2144——————————- INT 21 U - DR-DOS 5.0
AH = 44h AL = 16h to 18h
Note: these subfunctions are identical to AX=4456h to 4458h SeeAlso: AX=4456h,AX=4457h,AX=4458h ———-214451—————————– INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
AX = 4451h
Return: CF set if not Concurrent DOS
AX = error code (see AH=59h) CF clear if successful AH = 14h AL = version (high nybble = major version, low nybble = minor ver)
SeeAlso: AX=4452h,AX=4459h ———-214452—————————– INT 21 - DR DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION
AX = 4452h CF set
Return: CF set if not DR DOS
AX = error code (see AH=59h) CF clear if DR DOS DX = AX = version code 1060h = ??? 1063h = DR-DOS 3.41 ??? 1065h = DR-DOS 5.0 1067h = DR-DOS 6.0
Notes: the DR-DOS version is stored in the environment variable VER SeeAlso: AX=4412h,AX=4451h,AX=4459h ———-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 ———-214456—————————– INT 21 U - DR-DOS 5.0+ - ???
AX = 4456h DL = flag bit 0: ???
Return: AL = ??? Note: This was seen called by COMMAND.COM of DR-DOS 6.0 ———-214457—————————– INT 21 U - DR-DOS 5.0+ - ???
AX = 4457h DH = subfunction 00h ??? DL = 00h ??? = 01h ??? else Return: AX = ??? 01h Return: AX = ??? 02h DL = ??? Return: AX = ??? other Return: AX = ???
Note: This was seen called by COMMAND.COM of DR-DOS 6.0 ———-214458—————————– INT 21 U - DR DOS 5.0+ internal - GET POINTER TO TABLE OF ???
AX = 4458h
Return: ES:BX → internal table (see below)
AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0)
SeeAlso: AX=4452h
Format of internal table: Offset Size Description 00h DWORD pointer to ??? 04h 7 BYTEs ??? 0Bh WORD K 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 below) 10h WORD ??? 12h WORD pointer to segment of environment variables set in CONFIG,
or 0000h if already used (DR-DOS 6.0 only)
14h ??? ??? Note: 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 and the area lost.
Format of jump table for DR-DOS 5.0-6.0: Offset Size Description 00h 5 BYTEs far jump to entry point corresponding to CP/M CALL 5 05h 5 BYTEs far jump to entry point corresponding to INT 20 0Ah 5 BYTEs far jump to entry point corresponding to INT 21 0Fh 5 BYTEs far jump to entry point corresponding to ??? 14h 5 BYTEs far jump to entry point corresponding to ??? 19h 5 BYTEs far jump to entry point corresponding to ??? 1Eh 5 BYTEs far jump to entry point corresponding to ??? 23h 5 BYTEs far jump to entry point corresponding to ??? 28h 5 BYTEs far jump to entry point corresponding to ??? 2Dh 5 BYTEs far jump to entry point corresponding to ??? 32h 5 BYTEs far jump to entry point corresponding to ??? (IRET) 37h 5 BYTEs far jump to entry point corresponding to ??? (IRET) 3Ch 5 BYTEs far jump to entry point corresponding to ??? (IRET) 41h 5 BYTEs far jump to entry point corresponding to ??? (IRET) 46h 5 BYTEs far jump to entry point corresponding to ??? (IRET) 4Bh 5 BYTEs far jump to entry point corresponding to ??? ———-214459—————————– INT 21 - DR MultiUser DOS 5.0 - API
AX = 4459h CL = function (see INT E0"CP/M") DS,DX = parameters
Notes: DR-DOS 5.0 returns CF set and AX=0001h
this API is also available on INT E0
SeeAlso: AX=4452h,INT E0“CP/M” ———-2144FFBXFFFF———————– INT 21 U - NewSpace - ???
AX = 44FFh BX = FFFFh DX = ???
Note: 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
AH = 45h BX = file handle
Return: CF clear if successful AX = new handle CF set on error AX = error code (04h,06h) (see AH=59h)
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
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 AH=59h)
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
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 AH=59h)
the returned path does not include a drive or the initial backslash
many Microsoft products for Windows rely on AX being 0100h on success
SeeAlso: AH=19h,AH=3Bh
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 AH=59h) BX = size of largest available block
DOS 2.1-5.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
SeeAlso: AH=49h,AH=4Ah,AH=58h
AH = 49h ES = segment of block to free
Return: CF clear if successful CF set on error AX = error code (07h,09h) (see AH=59h)
apparently never returns an error 07h, despite official docs; DOS 3.30 code contains only an error 09h exit
DOS 2.1-5.0 does not coalesce adjacent free blocks when a block is freed, only when a block is allocated or resized
SeeAlso: AH=48h,AH=4Ah
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 AH=59h) BX = maximum paragraphs available for specified memory block
under DOS 2.1-5.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-5.0 coalesces any free blocks immediately following the block to be resized
SeeAlso: AH=48h,AH=49h
AH = 4Bh AL = type of load 00h load and execute 01h load but do not execute 03h load overlay 04h load and execute in background (European MSDOS 4.0 only) (see also AH=80h) DS:DX -> ASCIZ program name (must include extension) ES:BX -> parameter block (see below)
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 AH=59h)
DOS 2.x destroys all registers, including SS:SP
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 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 has been documented for DOS 5+, but was undocumented in prior versions
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
BUG: DOS 2.00 assumes that DS points at the current program's PSP
SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h“OS/2”,INT 2E
Offset | Size | Description |
---|---|---|
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 |
Offset | Size | Description |
---|---|---|
00h | WORD | segment at which to load overlay |
02h | WORD | relocation factor to apply to overlay if in .EXE format |
Offset | Size | Description |
---|---|---|
00h | 2 BYTEs | .EXE signature, either “MZ” or “ZM” (5A4Dh or 4D5Ah) |
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 to allocation 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 for New EXE) |
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 header within disk file |
—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” |
—LZEXE 0.91 compressed executable— | ||
1Ch | 4 BYTEs | signature “LZ91” |
—PKLITE compressed executable— | ||
1Ch | 2 BYTEs | ??? |
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 ” |
—other linkers— | ||
1Ch | var | optional information |
: | ||
N | N DWORDs | relocation items |
Offset | Size | Description |
---|---|---|
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 below) |
06h | WORD | length of entry table in bytes |
08h | DWORD | file load CRC (0 in Borland's TPW) |
0Ch | BYTE | program flags bits 0-1 DGROUP type * 0 = none * 1 = single shared * 2 = multiple (unshared) * 3 = (null) * bit 2: global initialization * bit 3: protected mode only * bit 4: 8086 instructions * bit 5: 80286 instructions * bit 6: 80386 instructions * bit 7: 80×87 instructions |
0Dh | BYTE | application flags * bits 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 * bit 3: is a Family Application (OS/2) * bit 5: 0=executable, 1=errors in image * bit 6: non-conforming program (valid stack is not maintained) * bit 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) |
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 below) |
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) |
37h | BYTE | other EXE flags * bit 0: supports long filenames * bit 1: 2.X protected mode * bit 2: 2.X proportional font * bit 3: gangload area |
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) |
Format of Codeview trailer (at end of executable):
Offset | Size | Description |
---|---|---|
00h | WORD | signature 4E42h ('NB') |
02h | WORD | Microsoft debug info version number |
04h | DWORD | Codeview header offset |
Offset | Size | Description |
---|---|---|
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 | attributes * bit 0: data segment rather than code segment * bit 1: unused??? * bit 2: real mode * bit 3: iterated * bit 4: movable * bit 5: sharable * bit 6: preloaded rather than demand-loaded * bit 7: execute-only (code) or read-only (data) * bit 8: relocations (directly following code for this segment) * bit 9: debug info present * bits 10,11: 80286 DPL bits * bit 12: discardable * bits 13-15: discard priority |
06h | WORD | number of bytes to allocate for segment (0000h = 64K) |
the first segment table entry is entry number 1
Offset | Size | Description | ||
---|---|---|---|---|
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 |
Offset | Size | Description | ||
---|---|---|---|---|
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 |
Offset | Size | Description |
---|---|---|
00h | WORD | alignment shift count for resource data |
02h | N RECORDs | resources |
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 below) |
resource type and name strings are stored immediately following the resource table, and are not null-terminated
Offset | Size | Description |
---|---|---|
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 |
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
Offset | Size | Description | |
---|---|---|---|
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 |
table entries are numbered starting from 1
Offset | Size | Description |
---|---|---|
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) |
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
Offset | Size | Description |
---|---|---|
00h | 2 BYTEs | “LE” (4Ch 45h) signature |
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 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 DOS4.x 04h Windows 386 |
0Ch | DWORD | module version |
10h | DWORD | module type bit 2: initialization (only for DLLs) * 0 = global * 1 = per-process bit 4: no internal fixups in executable image bit 5: no external fixups in executable image bits 8,9,10: * 0 = unknown * 1 = incompatible with PM windowing * 2 = compatible with PM windowing * 3 = uses PM windowing API bit 13: module not loadable (only for programs) bit 15: module is DLL rather than program note bit 1,2,3 : only for programs |
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 | bytes on last page |
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 below) |
44h | DWORD | object table entries |
48h | DWORD | object page map table offset |
4CH | DWORD | object iterate data map offset |
50h | DWORD | resource table offset |
54h | DWORD | resource table entries |
58h | DWORD | resident names table offset |
5Ch | DWORD | entry table offset |
60h | DWORD | module directives table offset |
64h | DWORD | Module Directives entries |
68h | DWORD | Fixup page table offset |
6Ch | DWORD | Fixup record table offset |
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 | ??? | (at most 24 additional bytes here) |
used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
Offset | Size | Description |
---|---|---|
00h | DWORD | virtual size in bytes |
04h | DWORD | relocation base address |
08h | DWORD | object flags bit 0: readable bit 1: writable bit 2: executable bit 3: resource bit 4: discardable bit 5: shared bit 6: preloaded bit 7: invalid bit 8-9: type * 00 normal * 01 zero-filled * 10 resident * 11 resident/contiguous bit 10: “RESIDENT/LONG_LOCKABLE” bit 11: reserved??? bit 12: “16:16_ALIAS” bit 13: “BIG” (32-bit???) bit 14: conforming bit 15: “OBJECT_I/O_PRIVILEGE_LEVEL” bits 16-31: reserved |
0Ch | DWORD | page map index |
10h | DWORD | page map entries |
10h | 4 BYTEs | ??? (apparently always zeros) |
Offset | Size | Description |
---|---|---|
00h | 4 BYTEs | ??? |
Offset | Size | Description |
---|---|---|
00h | BYTE | length of name |
01h | N BYTEs | name |
N+1 | 3 BYTEs | ??? |
Offset | Size | Description | ||
---|---|---|---|---|
00h | BYTE | number of entries in table | ||
01h | 10 BYTEs | per entry | ||
Offset | Size | Description | ||
00h | BYTE | bit flags bit 1: 32-bit entry |
||
01h | WORD | object number | ||
03h | BYTE | bit flags bit 0: exported bit 1: ??? |
||
04h | DWORD | offset of entry point | ||
08h | 2 BYTEs | ??? |
Offset | Size | Description |
---|---|---|
00h | WORD | signature 52FBh |
02h | WORD | version ID |
04h | DWORD | size of name pool in bytes |
08h | WORD | number of names in namem 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 info |
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 |
additional information on the Borland debugging info may be found in Borland's Open Architecture Handbook
AH = 4Bh DS:DX = 0000h:0000h
Return: ES:BX → ELRES history structure (see AH=2Bh/CX=454Ch)
DX = DABEh (signature, DAve BEnnett)
Note: ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett SeeAlso: AH=2Bh/CX=454Ch
AX = 4B04h
Return: CF clear if "MG" resident AX = 044Bh if "699"/"Thirteen Minutes" resident
SeeAlso: AX=4243h,AX=4B25h
AX = 4B05h DS:DX -> execution state structure (see below)
Return: CF clear if successful AX = 0000h CF set on error AX = error code (see AH=59h)
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 00h WORD reserved (00h) 02h WORD type flags
bit 0: program is an .EXE 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
AX = 4B25h
Return: DI = 1234h if resident SeeAlso: AX=4B04h,AX=4B40h
AX = 4B40h
Return: AX = 5678h if resident SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
AX = 4B41h ???
Return: ??? SeeAlso: AX=4B40h
AX = 4B4Ah
Return: AL = 57h if resident SeeAlso: AX=4B40h,AX=4B4Bh
AX = 4B4Bh
Return: CF clear if resident SeeAlso: AX=4B4Ah,AX=4B4Dh
AX = 4B4Dh
Return: CF clear if resident SeeAlso: AX=4B4Ah,AX=4B50h
AX = 4B50h
Return: AX = 1234h if resident SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
AX = 4B53h
Return: CF clear if resident SeeAlso: AX=4B50h,AX=4B55h
AX = 4B55h
Return: AX = 1231h if resident SeeAlso: AX=4B53h,AX=4B59h
AX = 4B59h
Return: CF clear if resident SeeAlso: AX=4B50h,AX=4B5Eh
AX = 4B5Eh
Return: CF clear if resident SeeAlso: AX=4B59h,AX=4B87h
AX = 4B60h ???
Return: ??? SeeAlso: AX=4B50h
AX = 4B87h
Return: AX = 6663h if resident SeeAlso: AX=4B5Eh,AX=4B95h
AX = 4B95h
Return: AX = 1973h if resident SeeAlso: AX=4B87h,AX=4BA7h
AX = 4BA7h
Return: AX = B459h if resident SeeAlso: AX=4B95h,AX=4BAAh
AX = 4BAAh
Return: CF clear if resident SeeAlso: AX=4BA7h,AX=4BAFh
AX = 4BAFh
Return: AL = AFh if “Magnitogorsk” resident
AL = FAh if "948"/"Screenplus1" resident
SeeAlso: AX=4BAAh,AX=4BDDh
AX = 4BDDh
Return: AX = 1234h SeeAlso: AX=4BAFh,AX=4BFEh
AX = 4BEEh
Return: AX = 1234h if grab successful
= 2345h if failed (INT 21 grabbed previously)
Notes: F-DRIVER.SYS is part of the F-PROT virus/trojan protection package by
Fridrik Skulason 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
AX = 4BF0h
Return: CF clear if installed
AX = 899Dh
Note: DIET is an executable-compression program SeeAlso: AX=4BF1h
AX = 4BF1h
Return: ??? SeeAlso: AX=4BF0h
AX = 4BFEh
Return: AX = 1234h if “Hitchcock” resident
AX = ABCDh if "1193"/"Copyright" resident DI = 55BBh if "Dark Avenger-1028" resident
SeeAlso: AX=4BDDh,AX=4BFFh“Justice”
AX = 4BFFh
Return: BL = FFh if "USSR-707" resident DI = 55AAh if "Justice" resident CF clear if "Europe 92" resident
SeeAlso: AX=4BFEh,AX=4BFFh“Cascade”,AX=5252h
AX = 4BFFh SI = 0000h DI = 0000h
Return: DI = 55AAh if installed
SeeAlso: AX=4BFFh“Justice”,AX=5252h
AH = 4Ch AL = return code
Return: never returns
unless the process is its own parent (see AH=26h, offset 16h in PSP), 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
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
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
SeeAlso: AH=4Bh,AH=4Ch
AH = 4Eh AL = special flag for use by APPEND (see note below) CX = file attribute mask (see AX=4301h) (bits 0 and 5 ignored) DS:DX -> ASCIZ file specification (may include path and wildcards)
Return: CF clear if successful [DTA] = FindFirst data block (see below) CF set on error AX = error code (02h,03h,12h) (see AH=59h)
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+ 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+ 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 printerresources may be obtained by searching for “\\SERVER\@*.*”
BUG: 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)
SeeAlso: AH=11h,AH=4Fh,AX=4301h,INT 2F/AX=111Bh,INT 2F/AX=B711h
Format of FindFirst data block: Offset Size Description —PCDOS 3.10, PCDOS 4.01, MSDOS 3.2/3.3/5.0— 00h BYTE drive letter 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 —PCDOS 4.01, MSDOS 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 —all versions, documented fields— 15h BYTE attribute of file found 16h WORD file time
bits 11-15: hour bits 5-10: minute bits 0-4: seconds/2
18h WORD file date
bits 9-15: year-1980 bits 5-8: month bits 0-4: day
1Ah DWORD file size 1Eh 13 BYTEs ASCIZ filename+extension ———-214E——————————- INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
AH = 4Eh DS:DX = 0000h:0000h
Return: AH = 99h if installed Note: WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
Hosgood and Terry Barnaby
———-214F——————————- INT 21 - DOS 2+ - “FINDNEXT” - FIND NEXT MATCHING FILE
AH = 4Fh [DTA] = data block from previous FindFirst or FindNext call
Return: CF clear if successful
CF set on error AX = error code (12h) (see AH=59h)
SeeAlso: AH=12h,AH=4Eh ———-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 DOS 3+, 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 not documented for DOS 2.x-4.x, but newly documented for 5.0.
SeeAlso: AH=26h,AH=51h,AH=62h ———-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+, 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 undocumented for DOS 2.x-4.x, but newly documented for 5.0.
SeeAlso: AH=26h,AH=50h,AH=62h ———-2152——————————- INT 21 U - DOS 2+ internal - “SYSVARS” - GET LIST OF LISTS
AH = 52h
Return: ES:BX → DOS list of lists Note: 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).
Format of List of Lists: Offset Size Description -12 WORD (DOS 3.1-3.3) sharing retry count (see AX=440Bh) -10 WORD (DOS 3.1-3.3) sharing retry delay (see AX=440Bh) -8 DWORD (DOS 3.x) pointer to current disk buffer -4 WORD (DOS 3.x) pointer in DOS code 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 00h DWORD pointer to first Drive Parameter Block (see AH=32h) 04h DWORD pointer to first System File Table (see below) 08h DWORD pointer to active CLOCK$ device's header 0Ch DWORD pointer to active CON device's header —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 below) 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 below for format)
—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 below) 17h DWORD pointer to array of current directory structures (see below) 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 below for format)
—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 below) 16h DWORD pointer to array of current directory structures (see below) 1Ah DWORD pointer to system FCB tables (see below) 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 below for format)
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 below) 16h DWORD pointer to array of current directory structures (see below) 1Ah DWORD pointer to system FCB tables (see below) 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 (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 below for format)
34h BYTE number of JOIN'ed drives??? 35h WORD pointer within IBMDOS code segment to list of special program
names (see below) (always 0000h for DOS 5.0)
37h DWORD pointer to FAR routine for resident IFS utility functions
(see below) 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 the y in BUFFERS x,y 43h BYTE boot drive (1=A:) 44h BYTE 01h if 80386+, 00h otherwise??? 45h WORD extended memory size in K —DOS 5.0— 10h 39 BYTEs as for DOS 4.x (see above) 37h DWORD pointer to SETVER program list or 0000h:0000h 3Bh WORD ??? pointer to function in DOS CS 3Dh WORD ??? apparently 0000h if DOS loaded low, PSP of most-recently
EXECed program if DOS in HMA
3Fh 8 BYTEs as for DOS 4.x (see above)
Format of memory control block (see also below): Offset Size Description 00h BYTE block type: 5Ah if last block in chain, otherwise 4Dh 01h WORD PSP segment of owner or
0000h if free 0006h if DR-DOS XMS UMB 0007h if DR-DOS excluded upper memory ("hole") 0008h if belongs to DOS FFFAh if 386MAX UMB control block FFFDh if 386MAX locked-out memory FFFEh if 386MAX UMB (immediately follows its control block)
03h WORD size of memory block in paragraphs 05h 3 BYTEs unused —DOS 2.x,3.x— 08h 8 BYTEs unused —DOS 4+ — 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+ it is divided into subsegments, each with its own memory control block (see below), the first of which is at offset 0000h. for DOS 5.0, 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.
Format of MSDOS 5.0 UMB control block: Offset Size Description 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
Format of STARLITE memory control block: Offset Size Description 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.x data segment subsegment control blocks: Offset Size Description 00h BYTE subsegment type (blocks typically appear in this order)
"D" device driver "E" device driver appendage "I" IFS (Installable File System) driver "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 below) "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 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 ptr 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.x: Identified by sub-segment control block type "S" within the DOS data segment.
Format of array elements in STACKS data segment: Offset Size Description 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.
SHARE.EXE hooks (DOS 3.1-5.00): (offsets from first system file table–pointed at by ListOfLists+04h) Offset Size Description -3Ch DWORD pointer to FAR routine for ???
Note: not called by MSDOS 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 AX=5D06h) Return: CF clear if successful CF set on error AX = DOS error code (24h) (see AH=59h) Note: SHARE assumes DS=SS=DOS DS, direct-accesses DOS internals to get name of file just opened
-34h DWORD pointer to FAR routine called on closing file
ES:DI -> system file table Note: SHARE assumes SS=DOS DS, directly accesses DOS internals does something to every lock record for file
-30h DWORD pointer to FAR routine to close all files for given computer
(called by AX=5D03h) Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
-2Ch DWORD pointer to FAR routine to close all files for given process
(called by AX=5D04h) Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
-28h DWORD pointer to FAR routine to close file by name
(called by AX=5D02h) DS:SI -> DOS parameter list (see 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 AH=59h) Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
-24h DWORD pointer to FAR routine to lock region of file
call with BX = file handle CX:DX = starting offset SI:AX = size Return: CF set on error AL = DOS error code (21h) (see AH=59h) Note: not called if file is marked as remote Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
-20h DWORD pointer to FAR routine to unlock region of file
call with BX = file handle CX:DX = starting offset SI:AX = size Return: CF set on error AL = DOS error code (21h) (see AH=59h) Note: not called if file is marked as remote Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
-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 Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
-18h DWORD pointer to FAR routine to get open file list entry
(called by AX=5D05h) call with DS:SI -> DOS parameter list (see 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 AH=59h) CF clear if successful ES:DI -> filename CX = number of locks owned by specified SFT BX = network machine number DX destroyed Note: SHARE assumes SS=DOS DS, directly accesses DOS internals
-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: SHARE assumes SS=DOS DS, directly accesses DOS internals 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 ???
Note: SHARE assumes SS=DS=DOS DS, direct-accesses DOS internals 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 below) 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
Format of sharing record: Offset Size Description 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 lock record (see below) 06h DWORD pointer to start of system file table chain for file 0Ah WORD unique sequence number 0Ch var ASCIZ full pathname
Format of SHARE.EXE lock record: Offset Size Description 00h WORD offset in SHARE's DS of next lock table in list 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
Format of DOS 2.x system file tables: Offset Size Description 00h DWORD pointer to next file table 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 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 AX=5700h) 19h WORD file time in packed format (see AX=5700h) 1Bh BYTE device attribute (see 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???
Format of DOS 3.0 system file tables and FCB tables: Offset Size Description 00h DWORD pointer to next file table 04h WORD number of files in this table 06h 38h bytes per file
Offset Size Description 00h-1Eh as for DOS 3.1+ (see below) 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 32h WORD PSP segment of file's owner 34h WORD (SHARE.EXE) offset in SHARE code seg of share record 36h WORD ??? apparently always 0000h
Format of DOS 3.1-3.3x system file tables and FCB tables: Offset Size Description 00h DWORD pointer to next file table 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 AH=3Dh) bit 15 set if this file opened via FCB 04h BYTE file attribute (see AX=4301h) 05h WORD device info word (see 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 07h DWORD pointer to device driver header if character device else pointer to DOS Drive Parameter Block (see AH=32h) 0Bh WORD starting cluster of file 0Dh WORD file time in packed format (see AX=5700h) 0Fh WORD file date in packed format (see AX=5700h) 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 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 31h WORD PSP segment of file's owner (see AH=26h) 33h WORD offset within SHARE.EXE code segment of sharing record (see above) 0000h = none
Format of DOS 4.0-5.0 system file tables and FCB tables: Offset Size Description 00h DWORD pointer to next file table 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 02h WORD file open mode (see AH=3Dh) bit 15 set if this file opened via FCB 04h BYTE file attribute (see AX=4301h) 05h WORD device info word (see 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 07h DWORD pointer to device driver header if character device else pointer to DOS Drive Parameter Block (see AH=32h) or REDIR data 0Bh WORD starting cluster of file 0Dh WORD file time in packed format (see AX=5700h) 0Fh WORD file date in packed format (see AX=5700h) 11h DWORD file size 15h DWORD current offset in file ---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 31h WORD PSP segment of file's owner (see AH=26h) 33h WORD offset within SHARE.EXE code segment of sharing record (see above) 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
Format of current directory structure (CDS) (array, LASTDRIVE entries): Offset Size Description 00h 67 BYTEs ASCIZ path in form X:\PATH (local) or \\MACH\PATH (network) 43h WORD drive attributes (see also note below and AX=5F07h)
bit 15: uses network redirector \ invalid if 00, installable 14: physical drive / file system if 11 13: JOIN'ed \ path above is true path that would be 12: SUBST'ed / needed if not under SUBST or JOIN
45h DWORD pointer to Drive Parameter Block for drive (see 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 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.x— 51h BYTE ??? used by network 52h DWORD pointer to IFS driver for this drive, 00000000h if native DOS 56h WORD ??? 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
Format of DR-DOS 5.0-6.0 current directory structure entry (array): Offset Size Description 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
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 2 BYTEs ??? apparently always 0001h 4Fh WORD cluster number of SUBST/JOIN “root” directory
0000h if physical root directory
Format of device driver header: Offset Size Description 00h DWORD pointer to next driver, offset=FFFFh if last driver 04h WORD device attributes
Character device: bit 15 set bit 14 IOCTL supported (see AH=44h) bit 13 (DOS 3+) output until busy supported bit 12 reserved bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported bits 10-8 reserved bit 7 (DOS 5+) Generic IOCTL check call supported (cmd 19h) (see AX=4410h,AX=4411h) bit 6 (DOS 3.2+) Generic IOCTL call supported (command 13h) (see AX=440Ch,AX=440Dh) bit 5 reserved bit 4 device is special (use INT 29 "fast console output") bit 3 device is CLOCK$ (all reads/writes use transfer record described below) bit 2 device is NUL bit 1 device is standard output bit 0 device is standard input Block device: bit 15 clear bit 14 IOCTL supported bit 13 non-IBM format bit 12 reserved bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported bit 10 reserved bit 9 direct I/O not allowed??? (set by DOS 3.3 DRIVER.SYS for "new" drives) bit 8 ??? set by DOS 3.3 DRIVER.SYS for "new" drives bit 7 (DOS 5+) Generic IOCTL check call supported (cmd 19h) (see AX=4410h,AX=4411h) bit 6 (DOS 3.2+) Generic IOCTL call supported (command 13h) implies support for commands 17h and 18h (see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh) bits 5-2 reserved bit 1 driver supports 32-bit sector addressing bit 0 reserved
06h WORD device strategy entry point
call with ES:BX -> request header (see 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 unused — 12h WORD (CD-ROM driver) reserved, must be 0000h 14h BYTE (CD-ROM driver) drive letter (must initially be 00h) 15h BYTE (CD-ROM driver) number of units 16h 6 BYTEs (CD-ROM driver) signature 'MSCDnn' where 'nn' is version
(currently '00')
Format of CLOCK$ transfer record: Offset Size Description 00h WORD number of days since 1-Jan-1980 02h BYTE minutes 03h BYTE hours 04h BYTE hundredths of second 05h BYTE seconds
Format of DOS 2.x disk buffer: Offset Size Description 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 AH=32h) 10h buffered data
Format of DOS 3.x disk buffer: Offset Size Description 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 flags
bit 7: ??? bit 6: buffer dirty bit 5: buffer has been referenced bit 4: ??? bit 3: sector in data area bit 2: sector in a directory, either root or subdirectory bit 1: sector in FAT bit 0: boot sector??? (guess)
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 AH=32h) 0Eh WORD unused??? (almost always 0) 10h buffered data
Format of DOS 4.00 (pre UR 25066) disk buffer info: Offset Size Description 00h DWORD pointer to array of disk buffer hash chain heads (see below) 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???
Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info: Offset Size Description 00h DWORD pointer to array of disk buffer hash chain heads (see below) 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
Format of DOS 4.x disk buffer hash chain head (array, one entry per chain): Offset Size Description 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-5.0 disk buffer: Offset Size Description 00h WORD forward ptr, offset only, to next least recently used buffer 02h WORD backward ptr, offset only 04h BYTE drive (0=A,1=B, etc), FFh if not in use 05h BYTE flags
bit 7: remote buffer bit 6: buffer dirty bit 5: buffer has been referenced bit 4: search data buffer (only valid if remote buffer) bit 3: sector in data area bit 2: sector in a directory, either root or subdirectory bit 1: sector in FAT bit 0: reserved
06h DWORD logical sector number 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 AH=32h) 11h WORD buffer use count if remote buffer (see flags above) 13h BYTE reserved 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 NDBCH) are on the same doubly-linked circular chain; for DOS 5.0, only a single circular chain exists. the links consist of offset addresses only, the segment being the same for all buffers in the chain.
Format of DOS 5.0 disk buffer info: Offset Size Description 00h DWORD pointer to least-recently-used buffer header (may be in HMA)
(see above)
04h WORD 0000h (DOS 5 does not hash disk buffers, so offset 00h points
directly at the only buffer chain)
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 ??? apparently always 00h 17h BYTE ??? apparently always FFh 18h BYTE ??? apparently always 00h 19h BYTE ??? apparently always 00h 1Ah WORD ??? segment within HIMEM.SYS area when buffers are in HMA and
UMBs are enabled???, else 0000h
1Ch BYTE bit 0 set iff UMB MCB chain linked to normal MCB chain 1Dh WORD ??? 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)
21h WORD paragraph of start of most recent MCB chain search
Format of IFS driver list: Offset Size Description 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 below)
call with ES:BX -> IFS request (see below)
14h WORD offset in header's segment of driver entry point
???
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]
Format of IFS request block: Offset Size Description 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 below) 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 below) 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 below) 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 below) 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 below) 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 below) 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 below) 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 below) 1Ah BYTE ??? 1Bh BYTE unused???
Format of IFS open file structure: Offset Size Description 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+ list of special program names: Offset Size Description 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
———-215252—————————– INT 21 - VIRUS - “516”/“Leapfrog” - INSTALLATION CHECK
AX = 5252h
Return: BX = FFEEh if resident SeeAlso: AX=4BFFh”Cascade“,AX=58CCh ———-2153——————————- INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
AH = 53h DS:SI -> BIOS Parameter Block (see below) ES:BP -> buffer for Drive Parameter Block (see AH=32h for format)
Return: ES:BP buffer filled Note: for DOS 3+, the cluster at which to start searching is set to 0000h
and the number of free clusters is set to FFFFh (unknown)
Format of BIOS Parameter Block: Offset Size Description 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+, set to zero if partition >32M, then set DWORD at 15h to actual number of sectors
0Ah BYTE media ID byte 0Bh WORD number of sectors per FAT —DOS 3+— 0Dh WORD number of sectors per track 0Fh WORD number of heads 11h DWORD number of hidden sectors 15h 11 BYTEs reserved —DOS 4+ — 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) ———-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 ———-2155——————————- INT 21 - DOS 2+ internal - CREATE CHILD PSP
AH = 55h DX = segment at which to create new PSP SI = (DOS 3+) value to place in memory size field at DX:[0002h]
Return: CF clear if successful
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+) sets current PSP to DX (DOS 3+) marks "no inherit" file handles as closed in child PSP
SeeAlso: AH=26h,AH=50h ———-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 AH=59h)
Notes: allows move between directories on same logical volume
does not set the archive attribute (see AX=4300h), which results in incremental backups not backing up the file under its new name open files should not be renamed (DOS 3+) 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. When invoked via AX=5D00h, only those files matching the attribute mask in CL are renamed.
SeeAlso: AH=17h,AX=4301h,AH=60h,AX=5D00h ———-215700—————————– INT 21 - DOS 2+ - GET FILE'S DATE AND TIME
AX = 5700h BX = file handle
Return: CF clear if successful
CX = file's time bits 15-11: hours (0-23) 10-5: minutes 4-0: seconds/2 DX = file's date bits 15-9: year - 1980 8-5: month 4-0: day CF set on error AX = error code (01h,06h) (see AH=59h)
SeeAlso: AX=5701h ———-215701—————————– INT 21 - DOS 2+ - SET FILE'S DATE AND TIME
AX = 5701h BX = file handle CX = new time (see AX=5700h) DX = new date (see AX=5700h)
Return: CF clear if successful
CF set on error AX = error code (01h,06h) (see AH=59h)
SeeAlso: AX=5700h ———-215702—————————– INT 21 - DOS 4.x only - GET ???
AX = 5702h BX = ??? (0000h through 0004h) DS:SI -> ??? ES:DI -> result buffer CX = size of result buffer
Return: CX = size of returned data SeeAlso: AX=5703h,AX=5704h ———-215703—————————– INT 21 - DOS 4.x only - GET ???
AX = 5703h BX = file handle (only 0000h through 0004h valid) DS:SI -> ??? passed through to INT 2F/AX=112Dh ES:DI -> result buffer CX = size of result buffer
Return: CX = size of returned data
ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
SeeAlso: AX=5702h,AX=5704h,INT 2F/AX=112Dh ———-215704—————————– INT 21 - DOS 4.x only - TRUNCATE OPEN FILE TO ZERO LENGTH
AX = 5704h BX = file handle (only 0000h through 0004h valid) DS:SI -> ??? passed through to INT 2F/AX=112Dh ES:DI -> result buffer CX = size of result buffer
Return: CX = size of returned data
ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh ———-2158——————————- INT 21 - DOS 3+ - GET OR SET MEMORY ALLOCATION STRATEGY
AH = 58h AL = subfunction 00h get allocation strategy Return: AX = current strategy 00h low memory first fit 01h low memory best fit 02h low memory last fit ---DOS 5.0--- 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 01h set allocation strategy BL = new allocation strategy (see above) BH = 0 (DOS 5.0) 02h (DOS 5.0) get UMB link state Return: AL = 00h UMBs not part of DOS memory chain = 01h UMBs in DOS memory chain 03h (DOS 5.0) set UMB link state BX = 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 AH=59h)
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 a program which changes the allocation strategy should restore it before terminating DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h
SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h,INT 67/AH=3Fh ———-2158CC—————————– INT 21 - VIRUS - “1067”/“Headcrash” - INSTALLATION CHECK
AX = 58CCh
Return: CF clear if resident SeeAlso: AX=5252h,AX=6969h
AH = 59h BX = 0000h
Return: AX = extended error code (see below) BH = error class (see below) BL = recommended action (see below) CH = error locus (see below) CL, DX, SI, DI, BP, DS, and ES destroyed
functions available under DOS 2.x map the true DOS 3+ 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
SeeAlso: AX=5D0Ah,INT 2F/AX=122Dh
Values for extended error code:
00h | no error |
01h | function number invalid |
02h | file not found |
03h | path not found |
04h | too many open files (no handles available) |
05h | access denied |
06h | invalid handle |
07h | memory control block destroyed |
08h | insufficient memory |
09h | memory block address invalid |
0Ah | environment invalid (usually >32K in length) |
0Bh | format invalid |
0Ch | access code invalid |
0Dh | data invalid |
0Eh | reserved |
0Fh | invalid drive |
10h | attempted to remove current directory |
11h | not same device |
12h | no more files |
—DOS 3+— | |
13h | disk write-protected |
14h | unknown unit |
15h | drive not ready |
16h | unknown command |
17h | data error (CRC) |
18h | bad request structure length |
19h | seek error |
1Ah | unknown media type (non-DOS disk) |
1Bh | sector not found |
1Ch | printer out of paper |
1Dh | write fault |
1Eh | read fault |
1Fh | general failure |
20h | sharing violation |
21h | lock violation |
22h | disk change invalid |
ES:DI → ASCIZ volume label of required disk | |
23h | FCB unavailable |
24h | sharing buffer overflow |
25h | (DOS 4+) code page mismatch |
26h | (DOS 4+) cannot complete file operation (out of input) |
27h | (DOS 4+) insufficient disk space |
28h- | 31h reserved |
32h | network request not supported |
33h | remote computer not listening |
34h | duplicate name on network |
35h | network name not found |
36h | network busy |
37h | network device no longer exists |
38h | network BIOS command limit exceeded |
39h | network adapter hardware error |
3Ah | incorrect response from network |
3Bh | unexpected network error |
3Ch | incompatible remote adapter |
3Dh | print queue full |
3Eh | queue not full |
3Fh | not enough space to print file |
40h | network name was deleted |
41h | network: Access denied |
42h | network device type incorrect |
43h | network name not found |
44h | network name limit exceeded |
45h | network BIOS session limit exceeded |
46h | temporarily paused |
47h | network request not accepted |
48h | network print/disk redirection paused |
49h | (LANtastic) invalid network version |
4Ah | (LANtastic) account expired |
4Bh | (LANtastic) password expired |
4Ch | (LANtastic) login attempt invalid at this time |
4Dh | (LANtastic v3+) disk limit exceeded on network node |
4Eh | (LANtastic v3+) not logged in to network node |
4Fh | reserved |
50h | file exists |
51h | reserved |
52h | cannot make directory |
53h | fail on INT 24h |
54h | (DOS 3.3+) too many redirections |
55h | (DOS 3.3+) duplicate redirection |
56h | (DOS 3.3+) invalid password |
57h | (DOS 3.3+) invalid parameter |
58h | (DOS 3.3+) network write fault |
59h | (DOS 4+) function not supported on network |
5Ah | (DOS 4+) required system component not installed |
Values for Error Class:
01h | out of resource (storage space or I/O channels) |
02h | temporary situation (file or record lock) |
03h | authorization (denied access) |
04h | internal (system software bug) |
05h | hardware failure |
06h | system failure (configuration file missing or incorrect) |
07h | application program error |
08h | not found |
09h | bad format |
0Ah | locked |
0Bh | media error |
0Ch | already exists |
0Dh | unknown |
Values for Suggested Action:
01h | retry |
02h | delayed retry |
03h | prompt user to reenter input |
04h | abort after cleanup |
05h | immediate abort |
06h | ignore |
07h | retry after user intervention |
Values for Error Locus:
01h | unknown or not appropriate |
02h | block device (disk error) |
03h | network related |
04h | serial device (timeout) |
05h | memory related |
AH = 5Ah CX = file attribute (see AX=4301h) DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the generated filename
</code> 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 AH=59h)
</code>
creates a file with a unique name which must be explicitly deleted
COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently wraps around to the end of the segment
SeeAlso: AH=3Ch,AH=5Bh
AH = 5Bh CX = file attribute (see 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 AH=59h)
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
SeeAlso: AH=3Ch,AH=5Ah ———-215C——————————- INT 21 - DOS 3+ - “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 AH=59h)
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
SeeAlso: AX=440Bh,INT 2F/AX=110Ah,INT 2F/AX=110Bh ———-215D00—————————– INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL
AX = 5D00h DS:DX -> DOS parameter list (see below) 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 wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h) 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
SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h
Format of DOS parameter list: Offset Size Description 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) ———-215D01—————————– INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
AX = 5D01h DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and process ID fields used
Return: CF set on error
AX = error code (see AH=59h) 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
SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h ———-215D02—————————– INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
AX = 5D02h DS:DX -> DOS parameter list (see AX=5D00h), 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 AH=59h) CF clear if successful
Notes: error unless SHARE is loaded (calls [SysFileTable-28h]) (see AH=52h)
name must be canonical fully-qualified, such as returned by AH=60h
SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h ———-215D03—————————– INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
AX = 5D03h DS:DX -> DOS parameter list (see AX=5D00h), only computer ID used
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
Note: error unless SHARE is loaded (calls [SysFileTable-30h]) (see AH=52h) SeeAlso: AX=5D02h,AX=5D04h ———-215D04—————————– INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
AX = 5D04h DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and process ID fields used
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
Note: error unless SHARE is loaded (calls [SysFileTable-2Ch]) (see AH=52h) SeeAlso: AX=5D02h,AX=5D03h ———-215D05—————————– INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
AX = 5D05h DS:DX -> DOS parameter list (see AX=5D00h) DPL's BX = index of sharing record (see 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 AH=52h)
names are always canonical fully-qualified, such as returned by AH=60h
SeeAlso: AH=5Ch,AH=60h ———-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 AH=59h) CF clear if successful DS:SI -> nonreentrant data area (includes all three DOS stacks) (critical error flag is first byte) 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
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 00h BYTE critical error flag 01h BYTE InDOS flag (count of active INT 21 calls) 02h BYTE drive on which current critical error occurred, or FFh 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 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 ??? 28h BYTE INT 24 returned Fail 29h BYTE bit flags for allowable actions on INT 24 2Ah BYTE ??? flag 2Bh BYTE FFh if Ctrl-Break termination, 00h otherwise 2Ch BYTE ??? flag of some kind 2Dh BYTE ??? (doesn't seem to be referenced) 2Eh BYTE day of month 2Fh BYTE month 30h WORD year - 1980 32h WORD number of days since 1-1-1980 34h BYTE day of week (0 = Sunday) 35h BYTE working SFT pointer at SDA+2AAh is valid ??? 36h BYTE 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 52h DWORD pointer to device driver entry point (used in calling driver) 56h 22 BYTEs device driver request header 6Ch 22 BYTEs device driver request header 82h BYTE type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child) 83h BYTE ??? apparently not referenced by kernel 84h 3 BYTEs 24-bit user number (see AH=30h) 87h BYTE OEM number (see AH=30h) 88h 2 BYTEs ??? 8Ah 6 BYTEs CLOCK$ transfer record (see AH=52h) 90h BYTE ??? buffer for single-byte I/O functions 91h BYTE ??? apparently not referenced by kernel 92h 128 BYTEs buffer for filename 112h 128 BYTEs buffer for filename 192h 21 BYTEs findfirst/findnext search data block (see AH=4Eh) 1A7h 32 BYTEs directory entry for found file 1C7h 81 BYTEs copy of current directory structure for drive being accessed 218h 11 BYTEs FCB-format filename for device name comparison 223h BYTE unused??? 224h 11 BYTEs wildcard destination specification for rename (FCB format) 22Fh 2 BYTEs ??? 231h WORD ??? 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 mode??? 23Ch BYTE ??? flag bits 0 and 4 23Dh BYTE ??? flag or counter 23Eh BYTE ??? flag 23Fh BYTE flag indicating how DOS function was invoked
(00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
240h BYTE ??? 241h BYTE ??? flag 242h BYTE flag: 00h if read, 01h if write 243h BYTE drive number for ??? 244h BYTE ??? 245h BYTE ??? flag or counter 246h BYTE line edit (AH=0Ah) insert mode flag (nonzero = on) 247h BYTE canonicalized filename referred to existing file/dir if FFh 248h BYTE ??? flag or counter 249h BYTE type of process termination (00h-03h) (see AH=4Dh) 24Ah BYTE ??? flag 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 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 ??? 25Ch WORD ??? temp 25Eh WORD ??? flag (only low byte referenced) 260h WORD ??? temp 262h BYTE Media ID byte returned by AH=1Bh,1Ch 263h BYTE ??? (doesn't seem to be referenced) 264h DWORD pointer to device header 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 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??? 284h WORD ??? relative cluster within file being accessed ??? 286h WORD ??? absolute cluster number being accessed ??? 288h WORD ??? current sector number 28Ah WORD ??? current cluster number 28Ch WORD ??? current offset in file DIV bytes per sector 28Eh 2 BYTEs ??? 290h WORD ??? current offset in file MOD bytes per sector 292h DWORD current offset in file 296h WORD ??? 298h WORD ??? 29Ah WORD ??? 29Ch WORD ??? 29Eh WORD ??? 2A0h WORD ??? 2A2h DWORD number of bytes appended to file 2A6h DWORD pointer to ??? 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 AH=4Eh)
2CDh 32 BYTEs directory entry for file being renamed 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.3 only— 738h BYTE device driver lookahead flag (see AH=64h) 739h BYTE ??? looks like a drive number 73Ah BYTE ??? flag of some kind 73Ah BYTE ??? ———-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
SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h ———-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
SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h ———-215D09—————————– INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
AX = 5D09h
Note: forces redirected printer output to be printed, and starts a new print
job
SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h ———-215D0A—————————– INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
AX = 5D0Ah DS:DX -> 11-word DOS parameter list (see AX=5D00h)
Return: nothing. next call to AH=59h will return values from fields AX,BX,CX,
DX,DI, and ES in corresponding registers
Note: documented for DOS 5+, but undocumented in earlier versions SeeAlso: AH=59h ———-215D0B—————————– INT 21 U - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS
AX = 5D0Bh
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful DS:SI -> swappable data area list (see below)
Note: 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
SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
Format of DOS 4.x swappable data area list: Offset Size Description 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
Format of DOS 4.0-5.0 swappable data area: Offset Size Description 00h BYTE critical error flag 01h BYTE InDOS flag (count of active INT 21 calls) 02h BYTE drive on which current critical error occurred or FFh 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 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 2 BYTEs ??? —remainder need only be swapped if in DOS— 1Ah WORD value of AX on call to INT 21 1Ch WORD PSP segment for sharing/network 1Eh WORD network machine number for sharing/network (0000h = us) 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 ??? 2Ah BYTE ??? 2Bh BYTE ??? 2Ch BYTE ??? 2Dh BYTE ??? 2Eh BYTE ??? 2Fh BYTE ??? (doesn't seem to be referenced) 30h BYTE day of month 31h BYTE month 32h WORD year - 1980 34h WORD number of days since 1-1-1980 36h BYTE day of week (0 = Sunday) 37h BYTE ??? 38h BYTE ??? 39h BYTE ??? 38h 30 BYTEs device driver request header 58h DWORD pointer to device driver entry point (used in calling driver) 5Ch 22 BYTEs device driver request header 72h 30 BYTEs device driver request header 90h 6 BYTEs ??? 96h 6 BYTEs CLOCK$ transfer record (see AH=52h) 9Ch 2 BYTEs ??? 9Eh 128 BYTEs buffer for filename 11Eh 128 BYTEs buffer for filename 19Eh 21 BYTEs findfirst/findnext search data block (see AH=4Eh) 1B3h 32 BYTEs directory entry for found file 1D3h 88 BYTEs copy of current directory structure for drive being accessed 22Bh 11 BYTEs FCB-format filename for device name comparison 236h BYTE ??? 237h 11 BYTEs wildcard destination specification for rename (FCB format) 242h 2 BYTEs ??? 244h WORD ??? 246h 5 BYTEs ??? 24Bh BYTE extended FCB file attributes 24Ch BYTE type of FCB (00h regular, FFh extended) 24Dh BYTE directory search attributes 24Eh BYTE file open mode 24Fh BYTE ??? flag bits 250h BYTE ??? flag or counter 251h BYTE ??? flag 252h BYTE flag indicating how DOS function was invoked
(00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
253h BYTE ??? 254h BYTE ??? 255h BYTE ??? 256h BYTE ??? 257h BYTE ??? 258h BYTE ??? 259h BYTE ??? 25Ah BYTE canonicalized filename referred to existing file/dir if FFh 25Bh BYTE ??? 25Ch BYTE type of process termination (00h-03h) 25Dh BYTE ??? 25Eh BYTE ??? 25Fh BYTE ??? 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??? 26Ah DWORD pointer to DOS Drive Parameter Block for ??? 26Eh WORD segment of disk buffer 270h WORD ??? 272h WORD ??? 274h WORD ??? 276h WORD ??? 278h BYTE Media ID byte returned by AH=1Bh,1Ch 279h BYTE ??? (doesn't seem to be referenced) 27Ah DWORD pointer to ??? 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 number of SFT to which file being opened will refer 28Ch WORD temporary storage for file handle 28Eh DWORD pointer to a JFT entry in process handle table (see AH=26h) 292h WORD offset in DOS DS of first filename argument 294h WORD offset in DOS DS of second filename argument 296h WORD ??? 298h WORD ??? 29Ah WORD ??? 29Ch WORD ??? 29Eh WORD ??? 2A0h WORD ??? 2A2h WORD ??? directory cluster number??? 2A4h DWORD ??? 2A8h DWORD ??? 2ACh WORD ??? 2AEh DWORD offset in file??? 2B2h WORD ??? 2B4h WORD bytes in partial sector 2B6h WORD number of sectors 2B8h WORD ??? 2BAh WORD ??? 2BCh WORD ??? 2BEh DWORD number of bytes appended to file 2C2h DWORD pointer to ??? disk buffer 2C6h DWORD pointer to ??? 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 ??? (set to 00h by INT 21h dispatcher, 02h when a read is
performed, and 01h or 03h by INT 21/AX=6C00h)
2D7h WORD ??? apparently unused 2D9h DWORD stored ES:DI for AX=6C00h 2DDh WORD extended file open action code (see AX=6C00h) 2DFh WORD extended file open attributes (see AX=6C00h) 2E1h WORD extended file open file mode (see AX=6C00h) 2E3h DWORD pointer to filename to open (see AX=6C00h) 2E7h WORD ??? 2E9h WORD ??? 2EBh BYTE ??? 2ECh WORD stores DS during call to [List-of-Lists + 37h] 2EEh WORD ??? 2F0h BYTE ??? 2F1h WORD ??? bit flags 2F3h DWORD pointer to user-supplied filename 2F7h DWORD pointer to ??? 2FBh WORD stores SS during call to [List-of-Lists + 37h] 2FDh WORD stores SP during call to [List-of-Lists + 37h] 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 AH=4Eh)
315h 32 BYTEs directory entry for file being renamed 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 (see AH=64h) 781h BYTE ??? looks like a drive number 782h BYTE ??? flag of some kind 783h BYTE ??? 784h WORD ??? 786h WORD ??? 788h WORD ??? 78Ah WORD ??? ———-215E00—————————– INT 21 - DOS 3.1+ network - GET MACHINE NAME
AX = 5E00h DS:DX -> 16-byte buffer for ASCIZ machine name
Return: CF clear if successful
CH = validity 00h name invalid nonzero valid CL = NetBIOS number for machine name DS:DX buffer filled with blank-paded name CF set on error AX = error code (01h) (see AH=59h)
Note: supported by OS/2 v1.3+ compatibility box, PC-NFS SeeAlso: AX=5E01h ———-215E01CH00————————- INT 21 - DOS 3.1+ network - SET MACHINE NAME
AX = 5E01h CH = 00h undefine name (make it invalid) <> 0 define name CL = name number DS:DX -> 15-character blank-padded ASCIZ name
SeeAlso: AX=5E00h ———-215E02—————————– INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING
AX = 5E02h BX = redirection list index (see AX=5F02h) CX = length of setup string DS:SI -> setup string
Return: CF clear if successful
CF set on error AX = error code (01h) (see AH=59h)
SeeAlso: AX=5E03h,INT 2F/AX=111Fh ———-215E03—————————– INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING
AX = 5E03h BX = redirection list index (see AX=5F02h) ES:DI -> 64-byte buffer for setup string
Return: CF clear if successful
CX = length of setup string ES:DI buffer filled CF set on error AX = error code (01h) (see AH=59h)
SeeAlso: AX=5E02h,INT 2F/AX=111Fh ———-215E04—————————– INT 21 - DOS 3.1+ network - SET PRINTER MODE
AX = 5E04h BX = redirection list index (see AX=5F02h) DX = mode bit 0: set if binary, clear if text (tabs expanded to blanks)
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
Note: calls INT 2F/AX=111Fh with 5E04h on stack SeeAlso: AX=5E05h,INT 2F/AX=111Fh ———-215E05—————————– INT 21 - DOS 3.1+ network - GET PRINTER MODE
AX = 5E05h BX = redirection list index (see AX=5F02h)
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful DX = printer mode (see AX=5E04h)
Note: calls INT 2F/AX=111Fh with 5E05h on stack SeeAlso: AX=5E04h,INT 2F/AX=111Fh ———-215F00—————————– INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
AX = 5F00h BL = redirection type 03h printer 04h disk drive
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful BH = redirection state 00h off 01h on
SeeAlso: AX=5F01h ———-215F01—————————– INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
AX = 5F01h BL = redirection type 03h printer 04h disk drive BH = redirection state 00h off 01h on
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
Note: when redirection is off, the local device (if any) rather than the
remote device is used
SeeAlso: AX=5F00h,INT 2F/AX=111Eh ———-215F02—————————– INT 21 - DOS 3.1+ network, Banyan VINES, PC-NFS - GET REDIRECTION LIST ENTRY
AX = 5F02h BX = redirection list index CX = 0000h (LANtastic) DS:SI -> 16-byte buffer for ASCIZ device name ES:DI -> 128-byte buffer for ASCIZ network name
Return: CF clear if successful
BH = device status 00h valid 01h invalid BL = device type 03h printer 04h disk drive CX = user data previously set with AX=5F03h DS:SI and ES:DI buffers filled DX,BP destroyed CF set on error AX = error code (01h,12h) (see AH=59h)
Notes: this function is passed through to INT 2F/AX=111Eh
error code 12h is returned if BX is greater than the size of the list also supported by Banyan VINES, PC-NFS, and LANtastic
SeeAlso: AX=5F03h,INT 2F/AX=111Eh ———-215F03—————————– INT 21 - DOS 3.1+ network, Banyan VINES, LANtastic - REDIRECT DEVICE
AX = 5F03h BL = device type 03h printer 04h disk drive CX = user data to save 0000h for LANtastic DS:SI -> ASCIZ local device name (16 bytes max) ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total)
Return: CF clear if successful
CF set on error AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
Note: if device type is disk drive, DS:SI must point at either a null string
or a string consisting the drive letter followed by a colon; if a null string, the network attempts to access the destination without redirecting a local drive
SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh ———-215F04—————————– INT 21 - DOS 3.1+ network, Banyan VINES, LANtastic - CANCEL REDIRECTION
AX = 5F04h DS:SI -> ASCIZ device name or path
Return: CF clear if successful
CF set on error AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
Note: the DS:SI string must be either a local device name, a drive letter
followed by a colon, or a network directory beginning with two backslashes
SeeAlso: AX=5F03h,INT 2F/AX=111Eh ———-215F05—————————– INT 21 - DOS 4.x + Microsoft Networks - GET REDIRECTION LIST EXTENDED ENTRY
AX = 5F05h BX = redirection list index DS:SI -> buffer for ASCIZ source device name ES:DI -> buffer for destination ASCIZ network path
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful BH = device status flag (bit 0 clear if valid) BL = device type (03h if printer, 04h if drive) CX = stored parameter value (user data) BP = NETBIOS local session number DS:SI buffer filled ES:DI buffer filled
Notes: the local session number allows sharing the redirector's session number
if an error is caused on the NETBIOS LSN, the redirector may be unable to correctly recover from errors
SeeAlso: AX=5F06h”Network“,INT 2F/AX=111Eh ———-215F05—————————– INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
AX = 5F05h DL = drive number (0=A:) DS:SI -> ASCIZ name of the object to map the drive to
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
SeeAlso: AX=5F06h”STARLITE“ ———-215F06—————————– INT 21 U - Network - GET REDIRECTION LIST???
AX = 5F06h ???
Return: ??? Note: appears to be similar to AX=5F02h and AX=5F05h SeeAlso: AX=5F05h”DOS“,INT 2F/AX=111Eh ———-215F06—————————– INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
AX = 5F06h DL = drive to be unmapped (0=A:)
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
SeeAlso: AX=5F05h”STARLITE“ ———-215F07—————————– INT 21 - DOS 5.0 - ENABLE DRIVE
AX = 5F07h DL = drive number (0=A:)
Return: CF clear if successful
CF set on error AX = error code (0Fh) (see AH=59h)
Note: simply sets the “valid” bit in the drive's CDS SeeAlso: AH=52h,AX=5F08h”DOS“ ———-215F07—————————– INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
AX = 5F07h DS:SI -> ASCIZ name of object to offer to network ES:DI -> ASCIZ name under which object will be known on the network MUST begin with three slashes
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
SeeAlso: AX=5F08h”STARLITE“ ———-215F08—————————– INT 21 - DOS 5.0 - DISABLE DRIVE
AX = 5F08h DL = drive number (0=A:)
Return: CF clear if successful
CF set on error AX = error code (0Fh) (see AH=59h)
Note: simply clears the “valid” bit in the drive's CDS SeeAlso: AH=52h,AX=5F07h”DOS“ ———-215F08—————————– INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
AX = 5F08h DS:SI -> ASCIZ network name (not local name) of object to unshare
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
SeeAlso: AX=5F07h”STARLITE“ ———-215F09—————————– INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
AX = 5F09h DS:DX -> ASCIZ name of the device driver to attach to
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
Note: the STARLITE distributed file system can attach to multiple networks
simultaneously
SeeAlso: AX=5F0Ah ———-215F0A—————————– INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
AX = 5F0Ah DS:DX -> ASCIZ name of device driver to detach from
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
SeeAlso: AX=5F09h ———-215F32—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPipeInfo
AX = 5F32h ???
Return: ??? SeeAlso: AX=5F33h,AX=5F34h ———-215F33—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPHandState
AX = 5F33h ???
Return: ??? SeeAlso: AX=5F32h,AX=5F34h ———-215F34—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosSetNmPHandState
AX = 5F34h ???
Return: ??? SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h ———-215F35—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekNmPipe
AX = 5F35h ???
Return: ??? SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h ———-215F36—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosTransactNmPipe
AX = 5F36h ???
Return: ??? SeeAlso: AX=5F34h,AX=5F37h ———-215F37—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosCallNmPipe
AX = 5F37h ???
Return: ??? SeeAlso: AX=5F36h,AX=5F38h ———-215F38—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosWaitNmPipe
AX = 5F38h ???
Return: ??? SeeAlso: AX=5F37h,AX=5F39h ———-215F39—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosRawReadNmPipe
AX = 5F39h ???
Return: ??? SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h ———-215F3A—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosRawWriteNmPipe
AX = 5F3Ah ???
Return: ??? SeeAlso: AX=5F3Bh,INT 2F/AX=118Fh ———-215F3B—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleSetInfo
AX = 5F3Bh ???
Return: ??? SeeAlso: AX=5F3Ch ———-215F3C—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleGetInfo
AX = 5F3Ch ???
Return: ??? SeeAlso: AX=5F3Bh ———-215F40—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetMessageBufferSend
AX = 5F40h ???
Return: ??? ———-215F42—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetServiceControl
AX = 5F42h ???
Return: ??? ———-215F44—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaGetInfo
AX = 5F44h ???
Return: ??? SeeAlso: AX=5F45h,AX=5F49h ———-215F45—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaSetInfo
AX = 5F45h ???
Return: ??? SeeAlso: AX=5F44h ———-215F46—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetUseEnum
AX = 5F46h ???
Return: ??? SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch ———-215F47—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetUseAdd
AX = 5F47h ???
Return: ??? SeeAlso: AX=5F46h,AX=5F48h ———-215F48—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetUseDel
AX = 5F48h ???
Return: ??? SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h ———-215F49—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetUseGetInfo
AX = 5F49h ???
Return: ??? SeeAlso: AX=5F44h,AX=5F47h ———-215F4A—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteCopy
AX = 5F4Ah ???
Return: ??? SeeAlso: AX=5F4Bh ———-215F4B—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteMove
AX = 5F4Bh ???
Return: ??? SeeAlso: AX=5F4Ah ———-215F4C—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum
AX = 5F4Ch ???
Return: ??? SeeAlso: AX=5F53h ———-215F4D—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosMakeMailslot
AX = 5F4Dh ???
Return: ??? SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h ———-215F4E—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosDeleteMailslot
AX = 5F4Eh ???
Return: ??? SeeAlso: AX=5F4Dh,AX=5F4Fh ———-215F4F—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosMailslotInfo
AX = 5F4Fh ???
Return: ??? SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h ———-215F50—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosReadMailslot
AX = 5F50h ???
Return: ??? SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h ———-215F51—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekMailslot
AX = 5F51h ???
Return: ??? SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h ———-215F52—————————– INT 21 - LAN Manager Enhanced DOS API local interface - DosWriteMailslot
AX = 5F52h ???
Return: ??? SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h ———-215F53—————————– INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum2
AX = 5F53h ???
Return: ??? SeeAlso: AX=5F4Ch ———-215F80—————————– INT 21 - LANtastic - GET LOGIN ENTRY
AX = 5F80h BX = login entry index (0-based) ES:DI -> 16-byte buffer for machine name
Return: CF clear if successful
buffer filled with machine name ("\\" prefix removed) DL = adapter number (v3+) CF set on error AX = error code
Note: the login entry index corresponds to the value BX used in AX=5F83h SeeAlso: AX=58F3h ———-215F81—————————– INT 21 - LANtastic - LOGIN TO SERVER
AX = 5F81h ES:DI -> ASCIZ login path followed immediately by ASCIZ password BL = adapter number FFh try all valid adapters 00h-07h try only specified adapter
Return: CF clear if successful
CF set on error AX = error code
Notes: login path is of form “\\machine\username”
if no password is used, the string at ES:DI must be terminated with three NULs for compatibility with LANtastic v3.0.
SeeAlso: AX=5F82h,AX=5F84h ———-215F82—————————– INT 21 - LANtastic - LOGOUT FROM SERVER
AX = 5F82h ES:DI -> ASCIZ server name (in form "\\machine")
Return: CF clear if successful
CF set on error AX = error code
SeeAlso: AX=5F81h,AX=5F88h,AX=5FCBh ———-215F83—————————– INT 21 - LANtastic - GET USERNAME ENTRY
AX = 5F83h BX = login entry index (0-based) ES:DI -> 16-byte buffer for username currently logged into
Return: CF clear if successful
DL = adapter number (v3+) CF set on error AX = error code
Note: the login entry index corresponds to the value BX used in AX=5F80h SeeAlso: AX=5F80h ———-215F84—————————– INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
AX = 5F84h BX = server index not currently logged into ES:DI -> 16-byte buffer for server name which is available for logging in to ("\\" prefix omitted)
Return: CF clear if successful
DL = adapter number to non-logged in server is on CF set on error AX = error code
SeeAlso: AX=5F81h ———-215F85—————————– INT 21 - LANtastic - CHANGE PASSWORD
AX = 5F85h ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
Return: CF clear if successful
CF set on error AX = error code
Notes: must be logged into the named machine
this function is illegal for group accounts
———-215F86—————————– INT 21 - LANtastic - DISABLE ACCOUNT
AX = 5F86h ES:DI -> ASCIZ machine name and password in form "\\machine\password"
Return: CF clear if successful
CF set on error AX = error code
Note: must be logged into the named machine and concurrent logins set to 1
by NET_MGR. Requires system manager to re-enable account.
———-215F87—————————– INT 21 - LANtastic v3+ - GET ACCOUNT
AX = 5F87h DS:SI -> 128-byte buffer for account information (see below) ES:DI -> ASCIZ machine name in form "\\machine"
Return: CF clear if successful
CF set on error AX = error code BX destroyed
Note: must be logged into the specified machine
Format of user account structure: Offset Size Description 00h 16 BYTEs blank-padded username (zero-padded for v4.x) 10h 16 BYTEs reserved (00h) 20h 32 BYTEs user description 40h BYTE privilege bits
bit 7: bypass access control lists 6: bypass queue protection 5: treat as local process 4: bypass mail protection 3: allow audit entry creation 2: system manager 0: user cannot change password
41h BYTE maximum concurrent users 42h 42 BYTEs bit map for disallowed half hours, beginning on Sunday
(bit set if half-hour not an allowed time)
6Ch WORD internal (0002h) 6Eh 2 WORDs last login time 72h 2 WORDs account expiration date (MSDOS-format year/month:day) 76h 2 WORDs password expiration date (0 = none) 7Ah BYTE number of days to extend password after change (1-31) 00h if no extension required —v3.x— 7Bh 5 BYTEs reserved —v4.x— 7Bh BYTE storage for first letter of user name when deleted (first character is changed to 00h when deleting account) 7Ch BYTE extended privileges 7Dh 3 BYTEs reserved ———-215F88—————————– INT 21 - LANtastic v4.0+ - LOGOUT FROM ALL SERVERS
AX = 5F88h
Return: CF clear if successful
CF set on error AX = error code
SeeAlso: AX=5F82h ———-215F97—————————– INT 21 - LANtastic - COPY FILE
AX = 5F97h CX:DX = number of bytes to copy (FFFFFFFFh = entire file) SI = source file handle DI = destination file handle
Return: CF clear if successful
DX:AX = number of bytes copied CF set on error AX = error code
Note: copy is performed by server ———-215F98—————————– INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
AX = 5F98h DS:SI -> message buffer (see below)
Return: CF clear if successful
CF set on error AX = error code
Note: v4.1- return no errors SeeAlso: AX=5F99h
Format of message buffer: Offset Size Description 00h BYTE reserved 01h BYTE message type
00h general 01h server warning 02h-7Fh reserved 80h-FFh user-defined
02h 16 BYTEs ASCIZ destination machine name 12h 16 BYTEs ASCIZ server name which user must be logged into 22h 16 BYTEs ASCIZ user name 32h 16 BYTEs ASCIZ originating machine name (filled in when received) 42h 80 BYTEs message text ———-215F99—————————– INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
AX = 5F99h ES:DI -> messsage buffer (see AX=5F98h for format)
Return: CF clear if successful
CF set on error AX = error code
SeeAlso: AX=5F98h ———-215F9A—————————– INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS
AX = 5F9Ah
Return: CF clear if successful
DL = bits describing processing for received unsolicited messages bit 0: beep before message is delivered 1: deliver message to message service 2: pop up message automatically (v3+) CF set on error AX = error code
SeeAlso: AX=5F9Bh,AX=5F9Ch,AX=5F9Dh ———-215F9B—————————– INT 21 - LANtastic - SET MESSAGE PROCESSING FLAG
AX = 5F9Bh DL = bits describing processing for received unsolicited messages (see AX=5F9Ah)
Return: CF clear if successful
CF set on error AX = error code
SeeAlso: AX=5F9Ah,AX=5F9Eh ———-215F9C—————————– INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
AX = 5F9Ch CX = time to leave on screen in clock ticks DH = 0-based screen line on which to place message
Return: CF clear if successful
CF set on error AX = error code (0Bh)
Notes: the original screen contents are restored when the message is removed
the message will not appear, and an error will be returned, if the screen is in a graphics mode
SeeAlso: AX=5F9Ah ———-215F9D—————————– INT 21 - LANtastic v4.1+ - GET REDIRECTOR CONTROL BITS
AX = 5F9Dh
Return: DL = redirector control bits
bit 7: set to notify on print job completion
SeeAlso: AX=5F9Ah,AX=5F9Eh ———-215F9E—————————– INT 21 - LANtastic v4.1+ - SET REDIRECTOR CONTROL BITS
AX = 5F9Eh DL = redirector control bits (see AH = 5F9Dh)
Return: nothing SeeAlso: AX=5F9Bh,AX=5F9Dh ———-215FA0—————————– INT 21 - LANtastic - GET QUEUE ENTRY
AX = 5FA0h BX = queue entry index (0000h is first entry) DS:SI -> buffer for queue entry (see below) ES:DI -> ASCIZ server name in form "\\name"
Return: CF clear if successful
CF set on error AX = error code BX = entry index for next queue entry (BX-1 is current index)
SeeAlso: AX=5FA1h,AX=5FA2h
Format of queue entry: Offset Size Description 00h BYTE status of entry
00h empty 01h being updated 02h being held 03h waiting for despool 04h being despooled 05h canceled 06h spooled file could not be accessed 07h destination could not be accessed 08h rush job
01h DWORD size of spooled file 05h BYTE type of entry
00h printer queue file 01h message 02h local file 03h remote file 04h to remote modem 05h batch processor file
06h BYTE output control
bit 6: don't delete (for mail) bit 5: mail file contains voice mail (v3+) bit 4: mail message has been read bit 3: response has been requested for this mail
07h WORD number of copies 09h DWORD sequence number of queue entry 0Dh 48 BYTEs pathname of spooled file 3Dh 16 BYTEs user who spooled file 4Dh 16 BYTEs name of machine from which file was spooled 5Dh WORD date file was spooled (see AX=5700h) 5Fh WORD time file was spooled (see AX=5700h) 61h 17 BYTEs ASCIZ destination device or user name 72h 48 BYTEs comment field ———-215FA1—————————– INT 21 - LANtastic - SET QUEUE ENTRY
AX = 5FA1h BX = handle of opened queue entry DS:SI -> queue entry (see AX=5FA0h)
Return: CF clear if successful
CF set on error AX = error code
Notes: the only queue entry fields which may be changed are output control,
number of copies, destination device, and comment the handle in BX is that from a create or open (INT 21/AH=3Ch,3Dh) call on the file "\\server\\@MAIL" or "\\server\@name" (for printer queue entries)
SeeAlso: AX=5FA0h,AX=5FA2h,AX=5FA9h ———-215FA2—————————– INT 21 - LANtastic - CONTROL QUEUE
AX = 5FA2h BL = control command 00h start despooling (privileged) 01h halt despooling (privileged) 02h halt despooling at end of job (privileged) 03h pause despooler at end of job (privileged) 04h print single job (privileged) 05h restart current job (privileged) 06h cancel the current job 07h hold queue entry 08h release a held queue entry 09h make queue entry a rushed job (privileged) CX:DX = sequence number to control (commands 06h-09h) DX = physical printer number (commands 00h-05h) 00h-02h LPT1-LPT3 03h,04h COM1,COM2 other all printers ES:DI -> ASCIZ server name in form "\\machine"
Return: CF clear if successful
CF set on error AX = error code
———-215FA3—————————– INT 21 - LANtastic v3+ - GET PRINTER STATUS
AX = 5FA3h BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2) DS:SI -> buffer for printer status (see below) ES:DI -> ASCIZ server name in form "\\machine"
Return: CF clear if successful
CF set on error AX = error code BX = next physical printer number
Note: you must be logged in to the specified server
Format of printer status: Offset Size Description 00h BYTE printer state
bit 7: printer paused bits 0-6: 0 printer disabled 1 will stop at end of job 2 print multiple jobs
01h WORD queue index of print job being despooled
FFFFh if not despooling--ignore all following fields
03h WORD actual characters per second being output 05h DWORD number of characters actually output so far 09h DWORD number of bytes read from spooled file so far 0Dh WORD copies remaining to print ———-215FA4—————————– INT 21 - LANtastic v3+ - GET STREAM INFO
AX = 5FA4h BX = 0-based stream index number DS:SI -> buffer for stream information (see below) ES:DI -> ASCIZ machine name in form "\\machine"
Return: CF clear if successful
CF set on error AX = error code BX = next stream number
SeeAlso: AX=5FA5h
Format of stream information: Offset Size Description 00h BYTE queueing of jobs for logical printer (0=disabled,other=enabled) 01h 11 BYTEs logical printer resource template (may contain ? wildcards) ———-215FA5—————————– INT 21 - LANtastic v3+ - SET STREAM INFO
AX = 5FA5h BX = 0-based stream index number DS:SI -> buffer containing stream information (see AX=5FA4h) ES:DI -> ASCIZ machine name in form "\\machine"
Return: CF clear if successful
CF set on error AX = error code
SeeAlso: AX=5FA4h ———-215FA7—————————– INT 21 - LANtastic - CREATE USER AUDIT ENTRY
AX = 5FA7h DS:DX -> ASCIZ reason code (max 8 bytes) DS:SI -> ASCIZ variable reason string (max 128 bytes) ES:DI -> ASCIZ machine name in form "\\machine"
Return: CF clear if successful
CF set on error AX = error code
Note: you must be logged in to the specified server and have the “U”
privilege to execute this call
———-215FA9—————————– INT 21 - LANtastic v4.1+ - SET EXTENDED QUEUE ENTRY
AX = 5FA9h BX = handle of opened queue entry DS:SI -> queue entry (see AX=5FA0h)
Return: CF clear if successful
CF set on error AX = error code
Note: functions exactly the same as AX=5FA1h except the spooled filename is
also set. This call supports direct despooling.
SeeAlso: AX=5FA1h ———-215FB0—————————– INT 21 - LANtastic - GET ACTIVE USER INFORMATION
AX = 5FB0h BX = server login entry index DS:SI -> buffer for active user entry (see below) ES:DI -> ASCIZ machine name in form "\\server"
Return: CF clear if successful
CF set on error AX = error code BX = next login index
Format of active user entry: Offset Size Description 00h WORD virtual circuit number 02h BYTE login state
bit 0: fully logged in 1: remote program load login 2: user has system manager privileges 3: user can create audit entries 4: bypass mail protection 5: treat as local process 6: bypass queue protection 7: bypass access control lists
03h BYTE last command issued (see below) 04h 5 BYTEs number of I/O bytes (40-bit unsigned number) 09h 3 BYTEs number of server requests (24-bit unsigned) 0Ch 16 BYTEs name of user who is logged in 1Ch 16 BYTEs name of remote logged in machine 2Ch BYTE extended privileges (v4+???) bit 0: user cannot change his password 2Dh WORD time left in minutes (0000h = unlimited) (v4+???)
Values for last command: 00h login 01h process termination 02h open file 03h close file 04h create file 05h create new file 06h create unique file 07h commit data to disk 08h read file 09h write file 0Ah delete file 0Bh set file attributes 0Ch lock byte range 0Dh unlock byte range 0Eh create subdirectory 0Fh remove subdirectory 10h rename file 11h find first matching file 12h find next matching file 13h get disk free space 14h get a queue entry 15h set a queue entry 16h control the queue 17h return login information 18h return link description 19h seek on file 1Ah get server's time 1Bh create audit entry 1Ch open file in multitude of modes 1Dh change password 1Eh disable account 1Fh local server file copy —v3+— 20h get username from account file 21h translate server's logical path 22h make indirect file 23h get indirect file contents 24h get physical printer status 25h get logical print stream info 26h set logical print stream info 27h get user's account record —v4+— 28h request server shutdown 29h cancel server shutdown 2Ah stuff server's keyboard 2Bh write then commit data to disk 2Ch set extended queue entry 2Dh terminate user from server 2Eh enable/disable logins 2Fh flush server caches 30h change username 31h get extended queue entry
(same as get queue, but can return named fields blanked)
———-215FB1—————————– INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
AX = 5FB1h DS:SI -> 64-byte buffer for link description ES:DI -> ASCIZ machine and shared directory name in form "\\machine\shared-resource"
Return: CF clear if successful
CX = access control list privilege bits for requesting user bit 4: (I) allow expansion of indirect files 5: (A) allow attribute changing 6: (P) allow physical access to device 7: (E) allow program execution 8: (N) allow file renaming 9: (K) allow directory deletion 10: (D) allow file deletion 11: (L) allow file/directory lookups 12: (M) allow directory creation 13: (C) allow file creation 14: (W) allow open for write and writing 15: (R) allow open for read and reading CF set on error AX = error code
———-215FB2—————————– INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
AX = 5FB2h BX = username entry index (0 for first) DS:SI -> 16-byte buffer for username ES:DI -> ASCIZ server name in form "\\machine"
Return: CF clear if successful
CF set on error AX = error code BX = next queue entry index
———-215FB3—————————– INT 21 - LANtastic v3+ - TRANSLATE PATH
AX = 5FB3h DS:SI -> 128-byte buffer for ASCIZ result ES:DI -> full ASCIZ path, including server name DX = types of translation to be performed bit 0: expand last component as indirect file 1: return actual path relative to server's physical disk
Return: CF clear if successful
CF set on error AX = error code
Note: always expands any indirect files along the path SeeALso: AX=5FB4h ———-215FB4—————————– INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
AX = 5FB4h DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file ES:DI -> full ASCIZ path of indirect file to create, incl machine name
Return: CF clear if successful
CF set on error AX = error code
Note: the contents of the indirect file may be any valid server-relative path ———-215FB5—————————– INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
AX = 5FB5h DS:SI -> 128-byte buffer for ASCIZ indirect file contents ES:DI -> full ASCIZ path of indirect file
Return: CF clear if successful
CF set on error AX = error code
———-215FB6—————————– INT 21 - LANtastic v4.1+ - SET AUTO-LOGIN DEFAULTS
AX = 5FB6h ES:DI -> pointer to ASCIZ default user name, immediately followed by ASCIZ password BL = adapter number to use for default login attempt FFh try all valid adapters 00h-05h try adapter 0-5 explicitly
Return: CF clear if successful
CF set on error AX = error code
Notes: call with ES:DI → two nulls to disable auto-login SeeAlso: AX=5FB7h ———-215FB7—————————– INT 21 - LANtastic v4.1+ - GET AUTO-LOGIN DEFAULTS
AX = 5FB7h ES:DI -> pointer to 16-byte buffer to store ASCIZ auto-login user name
Return: CF clear if successful
DL = adapter number used for default login attempt FFh all valid adapters will be tried 00h-05h specified adapter will be tried explicitly CF set on error AX = error code
SeeAlso: AX=5F81h,AX=5FB6h ———-215FC0—————————– INT 21 - LANtastic - GET TIME FROM SERVER
AX = 5FC0h DS:SI -> time block (see below) ES:DI -> ASCIZ server name to get time from
Return: CF clear if successful
CF set on error AX = error code
Format of time block: Offset Size Description 00h WORD year 02h BYTE day 03h BYTE month 04h BYTE minutes 05h BYTE hour 06h BYTE hundredths of second 07h BYTE second ———-215FC8—————————– INT 21 - LANtastic v4.0+ - SCHEDULE SERVER SHUTDOWN
AX = 5FC8h ES:DI -> ASCIZ server name in form "\\machine" DS:SI -> ASCIZ reason string (80 characters) CX = number of minutes until shutdown (0 = immediate) DX = option flags (see below) bit 0: auto reboot 1: do not notify users 2: halt after shutdown 3: shutdown due to power fail (used by UPS) bits 4-7: reserved bits 8-14: user definable bit 15: reserved
Return: CF clear if successful
CF set on error AX = error code
SeeAlso: AH=5FC9h ———-215FC9—————————– INT 21 - LANtastic v4.0+ - CANCEL SERVER SHUTDOWN
AX = 5FC9h ES:DI -> ASCIZ server name in form "\\machine"
Return: CF clear if successful
CF set on error AX = error code
Note: you must have the “S” privilege to use this call SeeAlso: AH=5FC8h ———-215FCA—————————– INT 21 - LANtastic v4.0+ - STUFF SERVER KEYBOARD BUFFER
AX = 5FCAh ES:DI -> ASCIZ server name in form "\\machine" DS:SI -> ASCIZ string to stuff (128 bytes)
Return: CF clear if successful
CF set on error AX = error code
Note: you must have the “S” privilege to use this call
maximum number of characters that can be stuffed is determined by the server's RUN BUFFER SIZE.
———-215FCB—————————– INT 21 - LANtastic v4.1+ - TERMINATE USER
AX = 5FCBh ES:DI -> ASCIZ server name in form "\\machine" DS:SI -> blank-padded username. A null char = wildcard. DS:DX -> blank-padded machine name. A null char = wildcard. CX = minutes until termination (0 = immediate)
Return: CF clear if successful
CF set on error AX = error code
Note: you must have the “S” privilege to use this call
you cannot log yourself out using this call
SeeAlso: AX=5F82h ———-215FCC—————————– INT 21 - LANtastic v4.1+ - GET/SET SERVER CONTROL BITS
AX = 5FCCh ES:DI -> ASCIZ server name in form "\\machine" CX = bit values (value of bits you want to set) See below. DX = bit mask (bits you are interested in, 0 = get only) See
below. Return: CF clear if successful
CX = control bits after call bit 0: disable logins CF set on error AX = error code
Note: you must have the “S” privilege to SET, anyone can GET. ———-215FCD—————————– INT 21 - LANtastic v4.1+ - FLUSH SERVER CACHES
AX = 5FCDh ES:DI -> ASCIZ server name in form "\\machine"
Return: CF clear if successful
CF set on error AX = error code
Note: you must have the “S” privilege to use this call. ———-215FD0—————————– INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
AX = 5FD0h
Return: CF clear if successful
CX = redirected printer timeout in clock ticks of 55ms 0000h if timeout disabled CF set on error AX = error code
SeeAlso: AX=5FD1h ———-215FD1—————————– INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
AX = 5FD1h CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
Return: CF clear if successful
CF set on error AX = error code
SeeAlso: AX=5FD0h ———-215FE0—————————– INT 21 - LANtastic - GET DOS SERVICE VECTOR
AX = 5FE0h
Return: CF clear if successful
ES:BX -> current FAR service routine CF set on error AX = error code
Note: the service routine is called by the LANtastic redirector whenever DOS
may safely be called, permitting external TSRs and drivers to hook into LANtastic's DOS busy flag checking
SeeAlso: AX=5FE1h,INT 28,INT 2A/AH=84h ———-215FE1—————————– INT 21 - LANtastic - SET DOS SERVICE VECTOR
AX = 5FE1h ES:BX -> FAR routine to call when DOS services are available
Return: CF clear if successful
CF set on error AX = error code
Note: new handler must chain to previous handler as its first action SeeAlso: AX=5FE0h ———-215FE2—————————– INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
AX = 5FE2h
Return: CF clear if successful
ES:BX -> current FAR message service routine CF set on error AX = error code
SeeAlso: AX=5FE3h ———-215FE3—————————– INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
AX = 5FE3h ES:BX -> FAR routine for processing network messages
Return: CF clear if successful
CF set on error AX = error code
Notes: handler must chain to previous handler as its first action
on invocation, ES:BX -> just-received message
SeeAlso: AX=5FE2h ———-2160——————————- INT 21 - DOS 3.0+ - CANONICALIZE FILENAME OR PATH
AH = 60h DS:SI -> ASCIZ filename or path ES:DI -> 128-byte buffer for canonicalized name
Return: CF set on error
AX = error code 02h invalid component in directory path or drive letter only 03h malformed path or invalid drive letter ES:DI buffer unchanged CF clear if successful AH = 00h AL = destroyed (00h or 5Ch or last char of current dir on drive) buffer filled with qualified name of form D:\PATH\FILE.EXT or \\MACHINE\PATH\FILE.EXT
Notes: the input path need not actually exist
letters are uppercased, forward slashes converted to backslashes, asterisks converted to appropriate number of question marks, and file and directory names are truncated to 8.3 if necessary. '.' and '..' in the path are resolved filespecs on local drives always start with "d:", those on network drives always start with "\\" if path string is on a JOINed drive, the returned name is the one that would be needed if the drive were not JOINed; similarly for a SUBSTed, ASSIGNed, or network drive letter. Because of this, it is possible to get a qualified name that is not legal under the current combination of SUBSTs, ASSIGNs, JOINs, and network redirections under DOS 3.3 through 5.00, a device name is translated differently if the device name does not have an explicit directory or the directory is \DEV (relative directory DEV from the root directory works correctly). In these cases, the returned string consists of the unchanged device name and extension appended to the string X:/ (forward slash instead of backward slash as in all other cases) where X is the default or explicit drive letter. functions which take pathnames require canonical paths if invoked via INT 21/AX=5D00h supported by OS/2 v1.1 compatibility box NetWare 2.1x does not support characters with the high bit set; early versions of NetWare 386 support such characters except in this call. In addition, NetWare returns error code 3 for the path "X:\"; one should use "X:\." instead. for DOS 3.3-5.0, the input and output buffers may be the same, as the canonicalized name is built in an internal buffer and copied to the specified output buffer as the very last step
SeeAlso: INT 2F/AX=1123h,INT 2F/AX=1221h ———-2161——————————- INT 21 - DOS 3+ - UNUSED
AH = 61h
Return: AL = 00h Note: this function does nothing and returns immediately ———-2162——————————- INT 21 - DOS 3+ - GET CURRENT PSP ADDRESS
AH = 62h
Return: BX = segment of PSP for current process Notes: under DOS 3+, 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 the current PSP is not necessarily the caller's PSP identical to the undocumented AH=51h
SeeAlso: AH=50h,AH=51h ———-216300—————————– INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS
AX = 6300h
Return: CF clear if successful
DS:SI -> lead byte table (see below for format) CF set on error AX = error code (01h) (see AH=59h)
Notes: does not preserve any registers other than SS:SP
the US version of MSDOS 3.30 treats this as an unused function, setting AL=00h and returning immediately
SeeAlso: AX=6301h,AH=07h,AH=08h,AH=0Bh
Format of lead byte table entry: Offset Size Description 00h 2 BYTEs low/high ends of a range of leading byte of double-byte chars 02h 2 BYTEs low/high ends of a range of leading byte of double-byte chars
... N 2 BYTEs 00h,00h end flag
———-216300—————————– INT 21 - Asian DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD TABLE
AX = 6300h
Return: AL = error code
00h successful DS:SI -> DBCS table (see below) all other registers except CS:IP and SS:SP destroyed FFh not supported
Notes: probably identical to AH=63h/AL=00h for DOS 2.25
the US version of MSDOS 3.30 treats this as an unused function, setting AL=00h and returning immediately the US version of DOS 4.0+ accepts this function, but returns an empty list
SeeAlso: AX=6300h”DOS 2.25“
Format of DBCS table: Offset Size Description 00h 2 BYTEs low/high ends of a range of leading byte of double-byte chars 02h 2 BYTEs low/high ends of a range of leading byte of double-byte chars
... N 2 BYTEs 00h,00h end flag
———-216301—————————– INT 21 - DOS 2.25, Asian DOS 3.2+ - SET KOREAN (HONGEUL) INPUT MODE
AX = 6301h DL = new mode 00h return only full characters on DOS keyboard input functions 01h return partially-formed characters also
Return: AL = status
00h successful FFh invalid mode
SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6302h ———-216302—————————– INT 21 - DOS 2.25, Asian DOS 3.2+ - GET KOREAN (HONGEUL) INPUT MODE
AX = 6302h
Return: AL = status
00h successful DL = current input mode 00h return only full characters 01h return partial characters FFh not supported
SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6301h ———-2164——————————- INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG
AH = 64h AL = flag 00h (default) call device driver function 5 (non-dest read) before INT 21/AH=01h,08h,0Ah nonzero don't call driver function 5
Return: nothing Notes: called by DOS 3.3+ PRINT.COM
does not use any of the DOS-internal stacks and is thus fully reentrant
SeeAlso: AH=01h,AH=08h,AH=0Ah,AX=5D06h ———-2164–BX0000———————– INT 21 - OS/2 v2.0 Virtual DOS Machine - GET/SET TASK TITLE
AH = 64h BX = 0000h CX = 636Ch DX = function 0000h enable automatic title switch on INT 21/AH=4Bh 0001h set session title ES:DI -> new ASCIZ title or "" to restore original title 0002h get session title ES:DI -> buffer for current title Return: buffer filled (single 00h if title never changed)
SeeAlso: INT 15/AH=12h/BH=05h,INT 21/AH=4Bh ———-2165——————————- INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
AH = 65h AL = info ID 01h get general internationalization info 02h get pointer to uppercase table 04h get pointer to filename uppercase table 05h get pointer to filename terminator table 06h get pointer to collating sequence table 07h (DOS 4+) get pointer to Double-Byte Character Set table BX = code page (-1=global code page) DX = country ID (-1=current country) ES:DI -> country information buffer (see below) CX = size of buffer (>= 5)
Return: CF set on error
AX = error code (see AH=59h) CF clear if succesful CX = size of country information returned ES:DI -> country information
Notes: AL=05h appears to return same info for all countries and codepages; it
has been documented for DOS 5.0, but was undocumented in ealier versions NLSFUNC must be installed to get info for countries other than the default subfunctions 02h and 04h are identical under OS/2
SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h
Format of country information: Offset Size Description 00h BYTE info ID —if info ID = 01h— 01h WORD size 03h WORD country ID 05h WORD code page 07h 34 BYTEs country-dependent info (see AH=38h) —if info ID = 02h— 01h DWORD pointer to uppercase table (see below) —if info ID = 04h— 01h DWORD pointer to filename uppercase table (see below) —if info ID = 05h— 01h DWORD pointer to filename character table (see below) —if info ID = 06h— 01h DWORD pointer to collating table (see below) —if info ID = 07h (DOS 4+)— 01h DWORD pointer to DBCS lead byte table (see below)
Format of uppercase table: Offset Size Description 00h WORD table size 02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh
Format of collating table: Offset Size Description 00h WORD table size 02h 256 BYTEs values used to sort characters 00h to FFh
Format of filename terminator table: Offset Size Description 00h WORD table size (not counting this word) 02h BYTE ??? (01h for MSDOS 3.30-5.00) 03h BYTE lowest permissible character value for filename 04h BYTE highest permissible character value for filename 05h BYTE ??? (00h for MSDOS 3.30-5.00) 06h BYTE first excluded character in range \ all characters in this 07h BYTE last excluded character in range / range are illegal 08h BYTE ??? (02h for MSDOS 3.30-5.00) 09h BYTE number of illegal (terminator) characters 0Ah N BYTES characters which terminate a filename: .”/\[]:|<>+=;, Note: partially documented for DOS 5.0, but undocumented for earlier versions
Format of filename uppercase table: Offset Size Description 00h WORD table size 02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh
Format of DBCS lead byte table: Offset Size Description 00h WORD length 02h 2N BYTEs start/end for N lead byte ranges
WORD 0000h (end of table)
———-2165——————————- INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
AH = 65h AL = function 20h capitalize character DL = character to capitalize Return: DL = capitalized character 21h capitalize string DS:DX -> string to capitalize CX = length of string 22h capitalize ASCIZ string DS:DX -> ASCIZ string to capitalize
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
Note: these calls have been documented for DOS 5+, but were undocumented in
DOS 4.x.
———-216523—————————– INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
AX = 6523h DL = character DH = second character of double-byte character (if applicable)
Return: CF set on error
CF clear if successful AX = type 00h no 01h yes 02h neither yes nor no
———-2165——————————- INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
AH = 65h AL = function A0h capitalize filename character DL = character to capitalize Return: DL = capitalized character A1h capitalize counted filename string DS:DX -> filename string to capitalize CX = length of string A2h capitalize ASCIZ filename DS:DX -> ASCIZ filename to capitalize
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
Note: nonfunctional in DOS 4.00 through 5.00 due to a bug (the code sets a
pointer depending on the high bit of AL, but doesn't clear the bit before branching by function number).
———-216601—————————– INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
AX = 6601h
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful BX = active code page (see AX=6602h) DX = system code page
SeeAlso: AX=6602h ———-216602—————————– INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
AX = 6602h BX = active code page 437 US 850 Multilingual 852 Slavic/Latin II (DOS 5+) 857 Turkish 860 Portugal 861 Iceland 863 Canada (French) 865 Norway/Denmark DX = system code page (active page at boot time)
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful
SeeAlso: AX=6601h ———-2167——————————- INT 21 - DOS 3.3+ - SET HANDLE COUNT
AH = 67h BX = size of new file handle table for process
Return: CF clear if successful
CF set on error AX = error code (see AH=59h)
Notes: if BX ⇐ 20, no action is taken if the handle limit has not yet been
increased, and the table is copied back into the PSP if the limit is currently > 20 handles for file handle tables of > 20 handles, DOS 3.30 never reuses the same memory block, even if the limit is being reduced; this can lead to memory fragmentation as a new block is allocated and the existing one freed only the first 20 handles are copied to child processes in DOS 3.3
BUG: the original release of DOS 3.30 allocates a full 64K for the handle
table on requests for an even number of handles
SeeAlso: AH=26h ———-2168——————————- INT 21 - DOS 3.3+ - “FFLUSH” - COMMIT FILE
AH = 68h BX = file handle
Return: CF clear if successful
all data still in DOS disk buffers is written to disk immediately, and the file's directory entry is updated CF set on error AX = error code (see AH=59h)
SeeAlso: AX=5D01h,AH=6Ah,INT 2F/AX=1107h ———-2169——————————- INT 21 U - DOS 4.0 internal - GET/SET DISK SERIAL NUMBER
AH = 69h AL = subfunction 00h get serial number 01h set serial number BL = drive (0=default, 1=A, 2=B, etc) DS:DX -> disk info (see below)
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful AX destroyed (AL = 00h) buffer filled with appropriate values from extended BPB (AL = 01h) extended BPB on disk set to values from buffer
Notes: does not generate a critical error; all errors are returned in AX
error 0005h given if no extended BPB on disk does not work on network drives (error 0001h) buffer after first two bytes is exact copy of bytes 27h thru 3Dh of extended BPB on disk
SeeAlso: AX=440Dh
Format of disk info: Offset Size Description 00h WORD info level (zero) 02h DWORD disk serial number (binary) 06h 11 BYTEs volume label or “NO NAME ” if none present 11h 8 BYTEs (AL=00h only) filesystem type–string “FAT12 ” or “FAT16 ” ———-2169——————————- INT 21 - DR-DOS 5.0 - NULL FUNCTION
AH = 69h
Return: AL = 00h SeeAlso: AH=18h ———-216969—————————– INT 21 - VIRUS - “Rape-747” - INSTALLATION CHECK
AX = 6969h
Return: AX = 0666h if resident SeeAlso: AX=58CCh,AH=76h“VIRUS” ———-216A——————————- INT 21 U - DOS 4+ - COMMIT FILE
AH = 6Ah BX = file handle
Return: CF clear if successful
AH = 68h CF set on error AX = error code (06h) (see AH=59h)
Note: identical to AH=68h in DOS 5.0; not known whether this is the case in
DOS 4.x
SeeAlso: AH=68h ———-216B——————————- INT 21 U - DOS 4.0 internal - ???
AH = 6Bh AL = subfunction 00h ??? DS:SI -> Current Directory Structure??? CL = drive (1=A:) 01h ??? DS:SI -> ??? CL = file handle??? 02h ??? DS:SI -> Current Directory Structure??? DI = ??? CX = drive (1=A:)
Return: CF set on error
AX = error code (see INT 21/AH=59h) CF clear if successful
Note: passed through to INT 2F/AX=112Fh with AX on top of stack SeeAlso: AH=6Bh“DOS 5”,INT 2F/AX=112Fh ———-216B——————————- INT 21 U - DOS 5.0 - NULL FUNCTION
AH = 6Bh
Return: AL = 00h Note: this function does nothing and returns immediately SeeAlso: AH=6Bh“DOS 4” ———-216C00—————————– INT 21 - DOS 4+ - EXTENDED OPEN/CREATE
AX = 6C00h BL = open mode as in AL for normal open (INT 21/AH=3Dh) bit 7: inheritance bits 4-6: sharing mode bit 3 reserved bits 0-2: access mode BH = flags bit 6 = auto commit on every write bit 5 = return error rather than doing INT 24h CX = create attribute bits 6-15 reserved bit 5: archive bit 4: reserved bit 3: volume label bit 2: system bit 1: hidden bit 0: readonly DL = action if file exists/does not exists bits 7-4 action if file does not exist 0000 fail 0001 create bits 3-0 action if file exists 0000 fail 0001 open 0010 replace/open DH = 00h (reserved) DS:SI -> ASCIZ file name
Return: CF set on error
AX = error code (see AH=59h) CF clear if successful AX = file handle CX = 1 file opened 2 file created 3 file replaced
Note: the PC LAN Program only supports DL=01h, DL=10h/sharing=compatibility,
and DL=12h
SeeAlso: AH=3Ch,AH=3Dh ———-217070BX6060———————– INT 21 - PCW Weather Card interface - GET DATA SEGMENT
AX = 7070h BX = 6060h CX = 7070h DX = 7070h SX = 7070h DX = 7070h
Return: AX = segment of data structure Notes: the data structure is at offset 516 from this segment.
the update byte is at offset 514 from this segment. Updates are once per second while this byte is nonzero and it is decremented once per second. While this byte is 0 updates are once per minute.
SeeAlso: AX=7070h/BX=7070h
Format of data structure: Offset Type Description 00h WORD hour 02h WORD minute 04h WORD second 06h WORD day 08h WORD month 0Ah WORD year 0Ch WORD ??? 0Eh WORD relative barometric pressure (in 1/100 inches) 10h WORD ??? 12h WORD ??? 14h WORD temperature 1 (in 1/10 degrees F) 16h WORD temperature 1 lowest (in 1/10 degrees F) 18h WORD temperature 1 highest (in 1/10 degrees F) 1Ah WORD temperature 2 (in 1/10 degrees F) 1Ch WORD temperature 2 lowest (in 1/10 degrees F) 1Eh WORD temperature 2 highest (in 1/10 degrees F) 20h WORD wind speed (in MPH) 22h WORD average of 60 wind speed samples (in MPH) 24h WORD highest wind speed (in MPH) 26h WORD wind chill factor (in 1/10 degrees F) 28h WORD lowest wind chill factor (in 1/10 degrees F) 2Ah WORD ??? 2Ch WORD wind direction (in degrees) 2Eh WORD accumulated daily rainfall (in 1/10 inches) 30h WORD accumulated annual rainfall (in 1/10 inches) ———-217070BX7070———————– INT 21 - PCW Weather Card interface - INSTALLATION CHECK
AX = 7070h BX = 7070h CX = 7070h DX = 7070h SX = 7070h DX = 7070h
Return: AX = 0070h
BX = 0070h CX = 0070h DX = 0070h SX = 0070h DX = 0070h
SeeAlso: AX=7070h/BX=6060h,AX=8080h ———-2176——————————- INT 21 - VIRUS - “Klaeren”/“Hate” - INSTALLATION CHECK
AH = 76h
Return: AL = 48h if resident SeeAlso: AX=6969h,AX=7700h“VIRUS” ———-217761—————————– INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK
AX = 7761h ('wa')
Return: AX = 6177h Note: WATCH.COM is part of the “TSR” package by TurboPower Software SeeAlso: INT 16/AX=7761h ———-217700—————————– INT 21 - VIRUS - “Growing Block” - INSTALLATION CHECK
AX = 7700h
Return: AX = 0920h if resident SeeAlso: AH=76h,AH=7Fh ———-217F——————————- INT 21 - VIRUS - “Squeaker” - INSTALLATION CHECK
AH = 7Fh
Return: AH = 80h if resident SeeAlso: AX=7700h,AH=83h“VIRUS”
Interrupt List, part 4 of 7 This compilation is Copyright © 1989,1990,1991,1992 Ralf Brown ———-2180——————————- INT 21 U - European MSDOS 4.0 - EXECUTE PROGRAM IN BACKGROUND
AH = 80h DS:DX -> ASCIZ full program name ES:BX -> parameter block (as for AX=4B00h)
Return: CF clear if successful
AX = CSID CF set on error AX = error code (see AH=59h)
Note: this function is called by the DETACH command SeeAlso: AX=8700h ———-218080—————————– INT 21 - PCW Weather Card interface - UNINSTALL PCW.COM AND FREE MEMORY
AX = 8080h
Return: ??? SeeAlso: AX=7070h/BX=7070h ———-2181——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 81h ???
Return: ??? ———-2182——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 82h ???
Return: ??? ———-2183——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 83h ???
Return: ??? ———-2183——————————- INT 21 - VIRUS - “SVC” - INSTALLATION CHECK
AH = 83h
Return: DX = 1990h if resident SeeAlso: AH=76h,AH=84h“VIRUS” ———-2184——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 84h ???
Return: ??? ———-2184——————————- INT 21 - VIRUS - “SVC 5.0” or “SVC 6.0” - INSTALLATION CHECK
AH = 84h
Return: DX = 1990h if resident
BH = version number (major in high nybble, minor in low)
SeeAlso: AH=83h“VIRUS”,AH=89h“VIRUS” ———-2185——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 85h ???
Return: ??? ———-2186——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 86h ???
Return: ??? ———-218700—————————– INT 21 U - European DOS 4.0 - GET PID???
AX = 8700h
Return: AX = PID if AL nonzero
BX = ??? CX = ???
Notes: called by MS C v5.1 getpid() function
this function apparently must return AX=0001h for INT 21/AH=80h to succeed
SeeAlso: AH=62h,AH=80h ———-2188——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 88h ???
Return: ??? ———-2189——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 89h ???
Return: ??? Note: reportedly called by Microsoft C 4.0 startup code ———-2189——————————- INT 21 - VIRUS - “Vriest” - INSTALLATION CHECK
AH = 89h
Return: AX = 0123h if resident SeeAlso: AH=84h“VIRUS”,AH=90h“VIRUS” ———-218A——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 8Ah ???
Return: ??? ———-218B——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 8Bh ???
Return: ??? ———-218C——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 8Ch ???
Return: ??? ———-218D——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 8Dh ???
Return: ??? ———-218E——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 8Eh ???
Return: ??? ———-218F——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 8Fh ???
Return: ??? ———-2190——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 90h ???
Return: ??? ———-2190——————————- INT 21 - VIRUS - “Carioca” - INSTALLATION CHECK
AH = 90h
Return: AH = 01h if resident SeeAlso: AH=89h“VIRUS”,AX=9753h“VIRUS” ———-2191——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 91h ???
Return: ??? ———-2192——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 92h ???
Return: ??? ———-2193——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 93h ???
Return: ??? ———-2194——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 94h ???
Return: ??? ———-2195——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 95h ???
Return: ??? ———-2196——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 96h ???
Return: ??? ———-2197——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 97h ???
Return: ??? ———-219753—————————– INT 21 - VIRUS - “Nina” - INSTALLATION CHECK
AX = 9753h
Return: never (executes original program) if virus resident SeeAlso: AH=90h“VIRUS”,AX=A1D5h“VIRUS” ———-2198——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 98h ???
Return: ??? ———-2199——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 99h ???
Return: ??? ———-219A——————————- INT 21 U - European MSDOS 4.0 - ???
AH = 9Ah ???
Return: ??? ———-21A0——————————- INT 21 - Attachmate Extra - GET 3270 DISPLAY STATE
AH = A0h
Return: AL = display status
bit 7 : 0=windowed, 1=enlarged bits 6-3: current screen profile number 0-9 bits 2-0: active window number 0=PC, 1-4=host B-E, 5-6=notepad F-G BX = host window status bit 15: reserved bit 14: 0=host E window installed, 1=not bit 13: 0=host E terminal on, 1=off bit 12: 0=host E window displayed, 1=not bit 11: reserved bit 10: 0=host D window installed, 1=not bit 9: 0=host D terminal on, 1=off bit 8: 0=host D window displayed, 1=not bit 7: reserved bit 6: 0=host C window installed, 1=not bit 5: 0=host C terminal on, 1=off bit 4: 0=host C window displayed, 1=not bit 3: reserved bit 2: 0=host B window installed, 1=not bit 1: 0=host B terminal on, 1=off bit 0: 0=host B window displayed, 1=not
Note: Attachmate Extra is a 3270 emulator by Attachmate Corporation SeeAlso: AH=A1h ———-21A1——————————- INT 21 - Attachmate Extra - SET 3270 DISPLAY STATE
AH = A1h AL = set status byte bit 7 : 0=windowed, 1=enlarged bits 6-3: current screen profile number 0-9 bits 2-0: active window number 0=PC, 1-4=host B-E, 5-6=notepad F-G
SeeAlso: AH=A0h,AH=A2h ———-21A1D5—————————– INT 21 - VIRUS - “789”/“Filehider” - INSTALLATION CHECK
AX = A1D5h
Return: AX = 900Dh if resident SeeAlso: AX=9753h,AX=A55Ah ———-21A2——————————- INT 21 - Attachmate Extra - SET HOST WINDOW STATE
AH = A2h AL = set status byte bit 7 : 0=power off, 1=power on bit 6 : 0=not installed, 1=installed bits 5-3: reserved bits 2-0: window number 1-4=host B-E
SeeAlso: AH=A1h ———-21A3——————————- INT 21 - Attachmate Extra - SEND KEYSTROKES TO HOST WINDOW
AH = A3h AL = window number (1-4=host B-E) CX = 0001h DS:BX -> keystroke buffer DL = zero if keystroke buffer contains host function code, non-zero if keystroke buffer contains ASCII character
Return: CX = zero if character sent, non-zero if not
BX incremented if CX=0
Values for host function code:
00h=reserved 10h=PF16 20h=Clear 30h=SysRq 01h=PF1 11h=PF17 21h=Print 31h=ErInp 02h=PF2 12h=PF18 22h=Left 32h=ErEof 03h=PF3 13h=PF19 23h=Right 33h=Ident 04h=PF4 14h=PF20 24h=Up 34h=Test 05h=PF5 15h=PF21 25h=Down 35h=Reset 06h=PF6 16h=PF22 26h=Home 36h=DevCncl 07h=PF7 17h=PF23 27h=Fast Left 37h=Dup 08h=PF8 18h=PF24 28h=Fast Right 38h=FldMark 09h=PF9 19h=Alt on 29h=Bksp 39h=Enter 0Ah=PF10 1Ah=Alt off 2Ah=Insert 3Ah=CrSel 0Bh=PF11 1Bh=Shift on 2Bh=Delete 0Ch=PF12 1Ch=Shift off 2Ch=Backtab 0Dh=PF13 1Dh=PA1 2Dh=Tab 0Eh=PF14 1Eh=PA2 2Eh=Newline 0Fh=PF15 1Fh=PA3 2Fh=Attn
———-21A4——————————- INT 21 - Attachmate Extra - GET HOST WINDOW BUFFER ADDRESS
AH = A4h AL = window number (1-4=host B-E)
Return: DS:BX → 3270 display buffer SeeAlso: AH=A5h,AH=B8h ———-21A5——————————- INT 21 - Attachmate Extra - GET HOST WINDOW CURSOR POSITION
AH = A5h AL = window number (1-4=host B-E)
Return: BX = cursor position (80 * row + column, where 0:0 is upper left) Note: if the host window is configured with the Extended Attribute (EAB)
feature, multiply the cursor position by 2 to obtain the byte offset into the display buffer
SeeAlso: AH=A4h ———-21A55A—————————– INT 21 - VIRUS - “Eddie-2” - INSTALLATION CHECK
AX = A55Ah
Return: AX = 5AA5h if resident SeeAlso: AX=A1D5h,AX=AA00h ———-21AA00—————————– INT 21 - VIRUS - “Blinker” - INSTALLATION CHECK
AX = AA00h
Return: AX = 00AAh if resident SeeAlso: AX=A55Ah,AX=AA03h ———-21AA03—————————– INT 21 - VIRUS - “Backtime” - INSTALLATION CHECK
AX = AA03h
Return: AX = 03AAh if resident SeeAlso: AX=AA00h,AH=ABh ———-21AB——————————- INT 21 - VIRUS - “600” or “Voronezh”-family - INSTALLATION CHECK
AH = ABh
Return: AX = 5555h if resident SeeAlso: AX=AA03h,AX=BBBBh“VIRUS” ———-21AF——————————- INT 21 - Attachmate Extra - GET TRANSLATE TABLE ADDRESS
AH = AFh
Return: DS:BX → translate tables (see below)
Format of translate tables: Offset Size Description 00h 256 BYTEs ASCII to 3270 buffer code translate table 100h 256 BYTEs 3270 buffer code to ASCII translate table 200h 256 BYTEs 3270 buffer code to EBCDIC translate table 300h 256 BYTEs EBCDIC to 3270 buffer code translate table ———-21B5——————————- INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL
AH = B5h AL = subfunction 03h get task mode Return: AH = 00h AL = current task mode byte 04h get task mode pointer Return: ES:BX -> task mode byte
Notes: the task mode byte specifies how task cleanup should be performed, but
is declared to be version-dependent allows a program to disable the automatic cleanup for programs managing task swapping, etc.
Values for task mode byte in version 3.01: 00h-03h reserved 04h no task cleanup ———-21B6——————————- INT 21 - Novell NetWare SFT Level II - EXTENDED FILE ATTRIBUTES
AH = B6h AL = subfunction 00h get extended file attributes 01h set extended file attributes CL = attributes bits 2-0: search mode (executables only) 000 none (use shell's default search) 001 search on all opens without path 010 do not search 011 search on read-only opens without path 100 reserved 101 search on all opens 110 reserved 111 search on all read-only opens 3: reserved 4: transaction tracking file 5: indexing file 6: read audit (to be implemented) 7: write audit (to be implemented) DS:DX -> ASCIZ pathname
Return: CF set on error
AL = error code 8Ch caller lacks privileges FFh file not found CL = current extended file attributes
SeeAlso: AX=4300h ———-21B8——————————- INT 21 - Novell Advanced NetWare 2.0+ - PRINT JOBS
AH = B8h AL = subfunction 00h get default print job flags 01h set default capture flags (see below) 02h get specific capture flags 03h set specific print job flags 04h get default local printer 05h set default local printer 06h set capture print queue 07h set capture print job 08h get banner user name 09h set banner user name CX = buffer size ES:BX -> buffer
Return: none
Format of capture flags table: Offset Size Description 00h BYTE status (used internally, should be set to 00h) 01h BYTE print flags
bit 2: print capture file if interrupted by loss of connection 3: no automatic form feed after print job 6: printing control sequences interpreted by print service 7: print banner page before capture file
02h BYTE printer number on server 03h BYTE number of copies to print 04h BYTE form type required in printer (default 00h) 05h 13 BYTEs text to be placed on banner page 12h BYTE reserved 13h BYTE default local printer (00h = LPT1) 14h BYTE flush capture file on LPT close if nonzero 15h WORD timeout in clock ticks for flushing capture file on inactivity
(high byte first) 0000h = never timeout
17h WORD maximum lines per page (high byte first) 19h WORD maximum characters per line (high byte first) 1Bh 13 BYTEs name of form required in printer 28h BYTE LPT capture flag
00h inactive, FFh LPT device is being captured
29h BYTE file capture flag
00h if no file specified, FFh if capturing to file
2Ah BYTE timing out (00h if no timeout in effect, FFh if timeout counter
running)
2Bh WORD offset of printer setup string (high byte first) 2Dh WORD offset of printer reset string (high byte first) 2Fh BYTE target connection ID 30h BYTE capture in progress if FFh 31h BYTE print job number assigned to capture if FFh 32h WORD bindery object ID of print queue if previous byte FFh 34h WORD print job number (high byte first) ———-21B8——————————- INT 21 - Attachmate Extra - DISABLE HOST BUFFER UPDATES
AH = B8h AL = window number (1-4=host B-E) DL = 01h
Notes: only valid in CUT mode
next AID keystroke (eg Enter) enables host buffer updates
SeeAlso: AH=A4h ———-21BB——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - SET END OF JOB STATUS
AH = BBh AL = new EOJ flag 00h disable EOJs otherwise enable EOJs
Return: AL = old EOJ flag SeeAlso: AH=D6h ———-21BBBB—————————– INT 21 - VIRUS - “Hey You” - INSTALLATION CHECK
AX = BBBBh
Return: AX = 6969h SeeAlso: AH=ABh“VIRUS”,AH=BEh“VIRUS” ———-21BC——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK PHYSICAL RECORD
AH = BCh AL = flags bit 0: lock as well as log record 1: non-exclusive lock BX = file handle CX:DX = offset BP = timeout in timer ticks (1/18 sec) SI:DI = length of region to lock
Return: AL = error code
00h successful 96h no dynamic memory for file FEh timed out FFh failed
SeeAlso: AH=BDh,AH=BFh ———-21BD——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE PHYSICAL RECORD
AH = BDh BX = file handle CX:DX = offset
Return: AL = error code (see AH=BCh) Note: unlocks record but does not remove it from log table SeeAlso: AH=BCh,AH=BEh“Novell”,AH=C0h ———-21BE——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR PHYSICAL RECORD
AH = BEh BX = file handle CX:DX = offset
Return: AL = error code (see AH=BCh) Note: unlocks record and removes it from log table SeeAlso: AH=BCh,AH=BDh,AH=C1h ———-21BE——————————- INT 21 - VIRUS - “Datalock” - INSTALLATION CHECK
AH = BEh
Return: AX = 1234h if resident SeeAlso: AX=BBBBh,AX=BE00h ———-21BE00—————————– INT 21 - VIRUS - “USSR-1049” - INSTALLATION CHECK
AX = BE00h CF set
Return: CF clear if resident SeeAlso: AH=BEh“VIRUS”,AH=C0h“VIRUS” ———-21BF——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK RECORD (FCB)
AH = BFh AL = flags bit 0: lock as well as log record 1: non-exclusive lock DS:DX -> opened FCB (see AH=0Fh) BX:CX = offset BP = lock timeout in timer ticks (1/18 sec) SI:DI = length
Return: AL = error code (see AH=BCh) SeeAlso: AH=BCh,AH=C0h“Novell”,AH=C2h“Novell” ———-21C0——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE RECORD (FCB)
AH = C0h DS:DX -> FCB (see AH=0Fh) BX:CX = offset
Return: AL = error code (see AH=BCh) Note: unlocks record but does not remove it from log table SeeAlso: AH=BDh,AH=BFh,AH=C1h“Novell”,AH=C3h ———-21C0——————————- INT 21 - VIRUS - “Slow”/“Zerotime”, “Solano” - INSTALLATION CHECK
AH = C0h
Return: AX = 0300h if “Slow”/“Zerotime” resident
AX = 1234h if "Solano" resident
SeeAlso: AX=BE00h,AH=C1h“VIRUS”,AX=C301h“VIRUS” ———-21C1——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR RECORD (FCB)
AH = C1h DS:DX -> opened FCB (see AH=0Fh) BX:CX = offset
Return: AL = error code (see AH=BCh) Note: unlocks record and removes it from log table SeeAlso: AH=BEh,AH=C0h“Novell”,AH=C4h ———-21C1——————————- INT 21 - VIRUS - “Solano” - ???
AH = C1h ???
Return: ??? SeeAlso: AH=C0h“VIRUS” ———-21C2——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - LOCK PHYSICAL RECORD SET
AH = C2h AL = flags bit 1: non-exclusive lock BP = lock timeout in timer ticks (1/18 sec)
Return: AL = error code
00h successful FEh timed out FFh failed
SeeAlso: AH=BFh,AH=C3h ———-21C2——————————- INT 21 - VIRUS - “Scott's Valley” - ???
AH = C2h ???
Return: ??? SeeAlso: AH=C0h“VIRUS” ———-21C3——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE PHYSICAL RECORD SET
AH = C3h
Return: AL = error code Note: unlocks but does not remove from log table SeeAlso: AH=C0h,AH=C2h“Novell”,AH=C4h ———-21C301DXF1F1———————– INT 21 - VIRUS - “905”/“Backfont” - INSTALLATION CHECK
AX = C301h DX = F1F1h
Return: DX = 0E0Eh if resident SeeAlso: AH=C0h“VIRUS”,AX=C500h“VIRUS” ———-21C4——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR PHYSICAL RECORD SET
AH = C4h
Return: AL = error code Note: unlocks and removes from log table SeeAlso: AH=C1h ———-21C5——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - SEMAPHORES
AH = C5h AL = subfunction 00h open semaphore DS:DX -> semaphore name (counted string) CL = initial value Return: CX:DX = semaphore handle BL = open count 01h examine semaphore Return: CX = semaphore value (sign extended) DL = open count 02h wait on semaphore BP = timeout in timer ticks (1/18 sec) (0000h = no wait) 03h signal semaphore 04h close semaphore CX:DX = semaphore handle (except function 00h)
Return: AL = error code
00h successful 01h semaphore value overflow 96h out of string space on server FEh invalid string length (AL=00h) or timeout FFh invalid initial value (AL=00h) or invalid handle
———-21C500—————————– INT 21 - VIRUS - “Sverdlov” - INSTALLATION CHECK
AX = C500h
Return: AX = 6731h if resident SeeAlso: AX=C301h“VIRUS”,AH=C6h“VIRUS” ———-21C6——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - GET OR SET LOCK MODE
AH = C6h AL = subfunction 00h set old "compatibility" mode 01h set new extended locks mode 02h get lock mode
Return: AL = current lock mode ———-21C6——————————- INT 21 - VIRUS - “Socha” - INSTALLATION CHECK
AH = C6h
Return: AL = 55h if resident SeeAlso: AX=C500h“VIRUS”,AX=C603h ———-21C603—————————– INT 21 - VIRUS - “Yankee” or “MLTI” - INSTALLATION CHECK
AX = C603h CF set
Return: CF clear if resident SeeAlso: AX=C500h“VIRUS”,AX=C700h“VIRUS” ———-21C7——————————- INT 21 - Novell NetWare 4.0 - TRANSACTION TRACKING SYSTEM
AH = C7h AL = subfunction 00h begin transaction (NetWare SFT level II) Return: AL = error code 01h end transaction (NetWare SFT level II) Return: AL = error code CX:DX = transaction reference number 02h TTS available (NetWare SFT level II) Return: AL = completion code 00h TTS not available 01h TTS available FDh TTS available but disabled 03h abort transaction (NetWare SFT level II) Return: AL = error code 04h transaction status 05h get application thresholds 06h set application thresholds 07h get workstation thresholds 08h set workstation thresholds
Return: ??? ———-21C700—————————– INT 21 - VIRUS - “MH-757” - INSTALLATION CHECK
AX = C700h
Return: AL = 07h if resident SeeAlso: AX=C603h“VIRUS”,AH=CBh“VIRUS” ———-21C8——————————- INT 21 - Novell NetWare 4.0 - BEGIN LOGICAL FILE LOCKING
AH = C8h if function C6h lock mode 00h: DL = mode 00h no wait 01h wait if function C6h lock mode 01h: BP = timeout in timer ticks (1/18 sec)
Return: AL = error code SeeAlso: AH=C9h ———-21C9——————————- INT 21 - Novell NetWare 4.0 - END LOGICAL FILE LOCKING
AH = C9h
Return: AL = error code SeeAlso: AH=C8h ———-21CA——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - LOG/LOCK PERSONAL FILE (FCB)
AH = CAh DS:DX -> FCB (see AH=0Fh) if function C6h lock mode 01h: AL = log and lock flag 00h log file only 01h lock as well as log file BP = lock timeout in timer ticks (1/18 sec)
Return: AL = error code
00h successful 96h no dynamic memory for file FEh timeout FFh failed
SeeAlso: AH=CBh ———-21CA15—————————– INT 21 - VIRUS - “Piter” - ???
AX = CA15h ???
Return: ??? SeeAlso: AH=CCh“VIRUS” ———-21CB——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - LOCK FILE SET
AH = CBh if function C6h lock mode 00h: DL = mode 00h no wait 01h wait if function C6h lock mode 01h: BP = lock timeout in timer ticks (1/18 sec)
Return: AL = error code
00h successful FEh timed out FFh failed
Note: attempts to lock all logged personal files SeeAlso: AH=CAh ———-21CB——————————- INT 21 - VIRUS - “Milous” - INSTALLATION CHECK
AH = CBh
Return: AL = 07h if resident SeeAlso: AX=C700h“VIRUS”,AX=CB02h ———-21CB02—————————– INT 21 - VIRUS - “Witcode” - INSTALLATION CHECK
AX = CB02h
Return: AX = 02CBh if resident SeeAlso: AX=CBh“VIRUS”,AH=CCh“VIRUS” ———-21CC——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE (FCB)
AH = CCh DS:DX -> FCB (see AH=0Fh)
Return: none Note: unlocks file, but does not remove it from the log table or close it SeeAlso: AH=CAh,AH=CDh ———-21CC——————————- INT 21 - VIRUS - “Westwood” - INSTALLATION CHECK
AH = CCh
Return: AX = 0700h if resident SeeAlso: AX=CB02h,AH=CDh“VIRUS”,AX=D000h“VIRUS” ———-21CD——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE SET
AH = CDh
Return: none Note: unlocks all personal files, but does not remove them from log table SeeAlso: AH=CAh,AH=CCh ———-21CD——————————- INT 21 - VIRUS - “Westwood” - ???
AH = CDh ???
Return: ??? SeeAlso: AH=CCh“VIRUS” ———-21CE——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE (FCB)
AH = CEh DS:DX -> FCB (see AH=0Fh)
Return: AL = error code Note: unlocks file and removes it from log table, then closes all opened and
logged occurrences
SeeAlso: AH=CAh,AH=CFh,AH=EDh“Novell” ———-21CF——————————- INT 21 - LANstep - ???
AH = CFh ???
Return: ??? Note: LANstep is a redesign of the Waterloo Microsystems PORT network ———-21CF——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE SET
AH = CFh
Return: AL = 00h Note: clears all entries in personal file log table SeeAlso: AH=CAh,AH=CEh ———-21D0——————————- INT 21 - Novell NetWare 4.6, Banyan VINES, Alloy NTNX - LOCK LOGICAL RECORD
AH = D0h DS:DX -> record string (counted string, max 100 data bytes) if function C6h lock mode 01h: (Novell, NTNX only) AL = flags bit 0: lock as well as log the record bit 1: non-exclusive lock BP = lock timeout in timer ticks (1/18 sec)
Return: AL = error code
00h successful 96h no dynamic memory for file FEh timed out FFh unsuccessful
SeeAlso: AH=D1h,AH=D2h ———-21D000—————————– INT 21 - VIRUS - “Fellowship” - INSTALLATION CHECK
AX = D000h
Return: BX = 1234h if resident SeeAlso: AH=CCh“VIRUS”,AH=D5h“VIRUS”,AX=D5AAh ———-21D1——————————- INT 21 - Novell NetWare 4.6, Banyan VINES, Alloy NTNX - LOCK LOGICAL RECORD SET
AH = D1h if function C6h lock mode 00h: DL = mode 00h no wait 01h wait if function C6h lock mode 01h: (Novell only) BP = lock timeout in timer ticks (1/18 sec) 0000h no wait
Return: AL = error code (see AH=D0h) SeeAlso: AH=D0h,AH=D3h ———-21D2——————————- INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - UNLOCK LOGICAL RECORD
AH = D2h DS:DX -> semaphore identifier (counted string up to 100 chars long)
Return: AL = error code (see AH=D0h) Note: unlocks record but does not remove it from log table SeeAlso: AH=D0h,AH=D3h ———-21D3——————————- INT 21 - Novell NetWare 4.0,Banyan VINES,Alloy NTNX - UNLOCK LOGICAL RECORD SET
AH = D3h
Return: AL = error code (see AH=D0h) Note: unlocks all semaphores logged in the semaphore set of the requesting PC SeeAlso: AH=D1h,AH=D2h ———-21D4——————————- INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - CLEAR LOGICAL RECORD
AH = D4h DS:DX -> semaphore identifier (counted string up to 100 chars long)
Return: AL = error code
00h successful FFh not successful
Note: unlocks record and removes it from log table SeeAlso: AH=D5h ———-21D5——————————- INT 21 - Novell NetWare 4.0,Banyan VINES,Alloy NTNX - CLEAR LOGICAL RECORD SET
AH = D5h
Return: AL = error code (see AH=D4h) Note: unlocks and clears all semaphores associated with the semaphore set
of the requesting PC
SeeAlso: AH=D4h ———-21D5——————————- INT 21 - VIRUS - “Carfield” - ???
AH = D5h ???
Return: ??? SeeAlso: AX=D5AAh,AH=F3h“Carfield” ———-21D5AA—————————– INT 21 - VIRUS - “Diamond-A”, “Diamond-B” - INSTALLATION CHECK
AX = D5AAh
Return: AX = 2A55h if “Diamond-A” resident
AX = 2A03h if "Diamond-B"-family virus resident
SeeAlso: AX=D000h,AH=D5h“VIRUS”,AX=D5AAh/BP=DEAAh ———-21D5AABPDEAA———————– INT 21 - VIRUS - “Dir” - INSTALLATION CHECK
AX = D5AAh BP = DEAAh
Return: SI = 4321h if resident SeeAlso: AX=D5AAh,AX=DADAh“VIRUS” ———-21D6——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - END OF JOB
AH = D6h
Return: AL = error code Note: unlocks and clears all locked or logged files and records held by
process, closes all files, resets error and lock modes, and releases all network resources
SeeAlso: AH=BBh ———-21D7——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - SYSTEM LOGOUT
AH = D7h
Return: AL = error code ———-21D8——————————- INT 21 - Novell NetWare, Banyan VINES - ALLOCATE RESOURCE
AH = D8h DL = resource number
Return: AL = status
00h successful FFh unsucessful
SeeAlso: AH=D9h ———-21D9——————————- INT 21 - Novell NetWare, Banyan VINES - DEALLOCATE RESOURCE
AH = D9h DL = resource number
Return: AL = status (see AH=D8h) SeeAlso: AH=D8h ———-21DA——————————- INT 21 - Novell NetWare 4.0 - GET VOLUME STATISTICS
AH = DAh DL = volume number ES:DI -> reply buffer (see below)
Return: AL = 00h SeeAlso: AH=36h
Format of reply buffer: Offset Size Description 00h WORD sectors/block 02h WORD total blocks 04h WORD unused blocks 06h WORD total directory entries 08h WORD unused directory entries 0Ah 16 BYTEs volume name, null padded 1Ah WORD removable flag, 0000h = not removable Note: all words are big-endian (high byte first) ———-21DADA—————————– INT 21 - VIRUS - “Gotcha” - INSTALLATION CHECK
AX = DADAh
Return: AH = A5h SeeAlso: AX=D5AAh,AH=DAFEh“VIRUS” ———-21DAFE—————————– INT 21 - VIRUS - “Plovdiv 1.3” - INSTALLATION CHECK
AX = DAFEh
Return: AX = 1234h if resident SeeAlso: AX=DADAh,AH=DDh“VIRUS”,AH=DEh“VIRUS” ———-21DB——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - GET NUMBER OF LOCAL DRIVES
AH = DBh
Return: AL = number of local disks as set by LASTDRIVE in CONFIG.SYS SeeAlso: AH=0Eh ———-21DC——————————- INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - GET STATION NUMBER
AH = DCh
Return: AL = station number
00h if NetWare not loaded or this machine is a non-dedicated server CX = station number in ASCII
Note: station number only unique for those PCs connected to same semaphore
service
———-21DC——————————- INT 21 - PCMag PCMANAGE/DCOMPRES - TURN ON/OFF
AH = DCh DX = state 0000h turn on 0001h turn off
SeeAlso: AX=FEDCh ———-21DD——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - SET ERROR MODE
AH = DDh DL = error mode 00h invoke INT 24 on critical I/O errors 01h return NetWare extended error code in AL 02h return error code in AL, mapped to standard DOS error codes
Return: AL = previous error mode ———-21DD——————————- INT 21 - VIRUS - “Jerusalem”-family - RELOCATE VIRUS???
AH = DDh CX = number of bytes to copy DS:SI -> source of copy ES:DI -> destination of copy
Return: does not return normally; return address is caller's CS:0100h with
AX = ???
SeeAlso: AH=E0h“VIRUS”,AH=EEh“VIRUS” ———-21DE——————————- INT 21 - Novell NetWare 4.0 - SET BROADCAST MODE
AH = DEh AL = broadcast mode 00h receive console and workstation broadcasts 01h receive console broadcasts only 02h receive no broadcasts 03h store all broadcasts for retrieval 04h get broadcast mode 05h disable shell timer interrupt checks 06h enable shell timer interrupt checks
Return: AL = old broadcast mode ———-21DE——————————- INT 21 - VIRUS - “Durban” - INSTALLATION CHECK
AH = DEh
Return: AH = DFh if resident SeeAlso: AX=DAFEh,AX=DEDEh“VIRUS” ———-21DE——————————- INT 21 - VIRUS - “April 1st EXE” - ???
AH = DEh ???
Return: ??? ———-21DEDE—————————– INT 21 - VIRUS - “Brothers” - INSTALLATION CHECK
AX = DEDEh
Return: AH = 41h if resident SeeAlso: AH=DEh“VIRUS”,AH=E0h“VIRUS” ———-21DF——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - CAPTURE
AH = DFh AL = subfunction 00h start LPT capture 01h end LPT capture 02h cancel LPT capture 03h flush LPT capture 04h start specific capture 05h end specific capture 06h cancel specific capture 07h flush specific capture
Return: AL = error code Note: under NTNX, only AL=00h-03h are supported, and all four send a print
break (see INT 17/AH=84h)
———-21E0——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - PRINT SPOOLING
AH = E0h DS:SI -> request buffer ES:DI -> reply buffer subfunction in third byte of request buffer 00h spool data to a capture file 01h close and queue capture file 02h set spool flags 03h spool existing file 04h get spool queue entry 05h remove entry from spool queue 06h get printer status 09h create a disk capture file
Return: AL = error code ———-21E0——————————- INT 21 - OS/286, OS/386 - INITIALIZE REAL PROCEDURE
AH = E0h ???
Return: ??? SeeAlso: AH=E1h“OS/286” ———-21E0——————————- INT 21 - DoubleDOS - MENU CONTROL
AH = E0h AL = subfunction 01h exchange tasks 73h resume invisible job if suspended 74h kill other job 75h suspend invisible job
Note: identical to AH=F0h SeeAlso: AH=F0h“DoubleDOS” ———-21E0——————————- INT 21 - VIRUS - “Jerusalem”, “Armagedon” - INSTALLATION CHECK
AH = E0h
Return: AX = 0300h if “Jerusalem” resident
AX = DADAh if "Armagedon" resident
SeeAlso: AH=DEh“VIRUS”,AX=DEDEh“VIRUS”,AX=E00Fh ———-21E00F—————————– INT 21 - VIRUS - “8-tunes” - INSTALLATION CHECK
AX = E00Fh
Return: AX = 4C31h if resident SeeAlso: AH=E0h“VIRUS”,AH=E1h“VIRUS” ———-21E1——————————- INT 21 - Novell NetWare 4.0 - BROADCAST MESSAGES
AH = E1h DS:SI -> request buffer ES:DI -> reply buffer subfunction in third byte of request buffer 00h send broadcast message 01h get broadcast message 02h disable station broadcasts 03h enable station broadcasts 04h send personal message 05h get personal message 06h open message pipe 07h close message pipe 08h check pipe status 09h broadcast to console
Return: AL = error code ———-21E1——————————- INT 21 - OS/286, OS/386 - ISSUE REAL PROCEDURE CALL
AH = E1h ???
Return: ??? Note: protected mode only??? SeeAlso: AH=E0h“OS/286”,AH=E2h“OS/286”,AH=E3h“OS/286”,AX=250Eh,INT 31/AX=0301h ———-21E1——————————- INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB
AH = E1h
SeeAlso: AH=E2h“DoubleDOS”,AH=E3h“DoubleDOS”,AH=E8h“DoubleDOS” SeeAlso: AH=F1h“DoubleDOS” ———-21E1——————————- INT 21 - VIRUS - “Mendoza”, “Fu Manchu” - INSTALLATION CHECK
AH = E1h
Return: AX = 0300h if “Mendoza” resident
AX = 0400h if "Fu Manchu" resident
SeeAlso: AX=E00Fh,AH=E4h“VIRUS” ———-21E2——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - DIRECTORY FUNCTIONS
AH = E2h DS:SI -> request buffer ES:DI -> reply buffer subfunction in third byte of request buffer 00h set directory handle 01h get directory path 02h scan directory information 03h get effective directory rights 04h modify maximum rights mask 05h get volume number 06h get volume name 0Ah create directory 0Bh delete directory 0Ch scan directory for trustees 0Dh add trustee to directory 0Eh delete trustee from directory 0Fh rename directory 10h purge erased files 11h restore erased file 12h allocate permanent directory handle 13h allocate temporary directory handle 14h deallocate directory handle 15h get volume info with handle 16h allocate special temporary directory handle 17h retrieve a short base handle (Advanced NetWare 2.0) 18h restore a short base handle (Advanced NetWare 2.0) 19h set directory information
Return: AL = error code ———-21E2——————————- INT 21 - OS/286, OS/386 - SET REAL PROCEDURE SIGNAL HANDLER
AH = E2h ???
Return: ??? SeeAlso: AH=E0h“OS/286”,AH=E1h“OS/286”,AH=E6h“OS/286” ———-21E2——————————- INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB
AH = E2h AL = character
Return: AL = 00h successful
01h buffer full (128 characters)
SeeAlso: AH=E1h“DoubleDOS”,AH=E3h“DoubleDOS”,AH=E8h“DoubleDOS” SeeAlso: AH=F2h“DoubleDOS” ———-21E3——————————- INT 21 - Novell NetWare 4.0, Alloy NTNX - CONNECTION CONTROL
AH = E3h DS:SI -> request buffer ES:DI -> reply buffer subfunction in third byte of request buffer 00h login 01h change password 02h map user to station set 03h map object to number 04h map number to object 05h get station's logged information 06h get station's root mask (obsolete) 07h map group name to number 08h map number to group name 09h get memberset M of group G 0Ah enter login area 0Bh ??? 0Ch ??? 0Dh log network message 0Eh get disk utilization (Advanced NetWare 1.0) 0Fh scan file information (Advanced NetWare 1.0) 10h set file information (Advanced NetWare 1.0) 11h get file server information (Advanced NetWare 1.0) 12h ??? 13h get internet address (Advanced NetWare 1.02) 14h login to file server (Advanced NetWare 2.0) 15h get object connection numbers (Advanced NetWare 2.0) 16h get connection information (Advanced NetWare 1.0) 32h create object (Advanced NetWare 1.0) 33h delete object (Advanced NetWare 1.0) 34h rename object (Advanced NetWare 1.0) 35h get object ID (Advanced NetWare 1.0) 36h get object name (Advanced NetWare 1.0) 37h scan object (Advanced NetWare 1.0) 38h change object security (Advanced NetWare 1.0) 39h create property (Advanced NetWare 1.0) 3Ah delete property (Advanced NetWare 1.0) 3Bh change property security (Advanced NetWare 1.0) 3Ch scan property (Advanced NetWare 1.0) 3Dh read property value (Advanced NetWare 1.0) request buffer contains the property name in all caps property "IDENTIFICATION" returns the user's name 3Eh write property value (Advanced NetWare 1.0) 3Fh verify object password (Advanced NetWare 1.0) 40h change object password (Advanced NetWare 1.0) 41h add object to set (Advanced NetWare 1.0) 42h delete object from set (Advanced NetWare 1.0) 43h is object in set? (Advanced NetWare 1.0) 44h close bindery (Advanced NetWare 1.0) 45h open bindery (Advanced NetWare 1.0) 46h get bindery access level (Advanced NetWare 1.0) 47h scan object trustee paths (Advanced NetWare 1.0) C8h check console priviledges C9h get file server description strings CAh set file server date and time CBh disable file server login CCh enable file server login CDh get file server login status CEh purge all erased files CFh disable transaction tracking D0h enable transaction tracking D1h send console broadcast D2h clear connection number D3h down file server D4h get file system statistics D5h get transaction tracking statistics D6h read disk cache statistics D7h get drive mapping table D8h read physical disk statistics D9h get disk channel statistics DAh get connection's task information DBh get list of a connection's open files DCh get list of connections using a file DDh get physical record locks by connection and file DEh get physical record locks by file DFh get logical records by connection E0h get logical record information E1h get connection's semaphores E2h get semaphore information E3h get LAN driver's configuration information E5h get connection's usage statistics E6h get object's remaining disk space E7h get server LAN I/O statistics E8h get server miscellaneous information E9h get volume information
Return: AL = error code
Format of object property: Offset Size Description 00h 1-16 BYTEs property name
N BYTE flags bit 0: property is dynamic 4: property belongs to set rather than item
N+1 BYTE security levels (see below)
???
Values for security levels: 00h everyone may access 01h only logged-in clients may access 02h only clients logged-in with object's name, type, and password 03h only clients logged-in with supervisor privileges 04h only NetWare may access Note: the above values are stored in a nybble; the high half-byte is write
access and the low half-byte is read access
Values for object type: 00h unknown 01h user 02h user group 03h print queue 04h file server 05h job server 06h gateway 07h print server 08h archive queue 09h archive server 0Ah job queue 0Bh administration 24h remote bridge server 47h advertising print server FFh wild (used only for finding objects) ———-21E3——————————- INT 21 - OS/286, OS/386 - ISSUE REAL INTERRUPT
AH = E3h AL = interrupt number ???
Return: ??? Note: protected mode only??? SeeAlso: AH=E1h“OS/286”,INT 31/AX=0300h ———-21E3——————————- INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB
AH = E3h AL = character
Return: AL = 00h successful
01h buffer full (128 characters)
SeeAlso: AH=E1h“DoubleDOS”,AH=E2h“DoubleDOS”,AH=E8h“DoubleDOS” SeeAlso: AH=F3h“DoubleDOS” ———-21E4——————————- INT 21 - Novell NetWare 4.0 - SET FILE ATTRIBUTES (FCB)
AH = E4h CL = file attributes bit 0: read only 1: hidden 2: system 7: shareable DX:DX -> FCB (see AH=0Fh)
Return: AL = error code SeeAlso: AX=4301h ———-21E4——————————- INT 21 - VIRUS - “Anarkia” - INSTALLATION CHECK
AH = E4h
Return: AH = 04h if resident SeeAlso: AH=E1h“VIRUS”,AH=E7h“VIRUS” ———-21E400—————————– INT 21 - DoubleDOS - INSTALLATION CHECK/PROGRAM STATUS
AX = E400h
Return: AL = 00h if DoubleDOS not present
= 01h if running in visible DoubleDOS partition = 02h if running in the invisible DoubleDOS partition
SeeAlso: AH=E5h“DoubleDOS”,AX=F400h ———-21E400—————————– INT 21 - OS/286, OS/386 - CHAIN TO REAL-MODE HANDLER
AX = E400h ???
Return: ??? Note: protected mode only??? ———-21E402—————————– INT 21 - OS/286, OS/386 - SET PROTECTED-MODE TASK GATE
AX = E402h ???
Return: ??? Note: protected mode only??? SeeAlso: AX=E403h ———-21E403—————————– INT 21 - OS/286, OS/386 - REMOVE PROTECTED-MODE TASK GATE
AX = E403h ???
Return: ??? Note: protected mode only??? SeeAlso: AX=E402h ———-21E5——————————- INT 21 - Novell NetWare 4.0 - UPDATE FILE SIZE (FCB)
AH = E5h DS:DX -> FCB (see AH=0Fh)
Return: AL = error code ———-21E5——————————- INT 21 - DoubleDOS - OTHER PROGRAM STATUS
AH = E5h
Return: AL = 00h no program in other partition
= 01h program in other partition is running = 02h program in other partition is suspended
SeeAlso: AX=E400h“DoubleDOS”,AH=F5h“DoubleDOS” ———-21E500—————————– INT 21 - OS/286, OS/386 - HEAP MANAGEMENT STRATEGY
AX = E500h ???
Return: ??? SeeAlso: AX=E501h ———-21E501—————————– INT 21 - OS/286, OS/386 - FORCE HEAP COMPACTION
AX = E501h ???
Return: ??? SeeAlso: AX=E500h ———-21E6——————————- INT 21 - Novell NetWare 4.0 - COPY FILE TO FILE (FCB)
AH = E6h CX:DX = number of bytes to copy DS:SI -> source FCB ES:DI -> destination FCB
Return: AL = error code ———-21E6——————————- INT 21 P - OS/286, OS/386 - ISSUE REAL PROCEDURE SIGNAL FROM PROTECTED MODE
AH = E6h ???
Return: ??? SeeAlso: AX=E2h“OS/286” ———-21E7——————————- INT 21 - Novell NetWare 4.0, Banyan VINES - GET FILE SERVER DATE AND TIME
AH = E7h DS:DX -> date/time buffer (see below)
Return: AL = error code
00h successful FFh unsuccessful
Note: also supported by Alloy NTNX SeeAlso: AH=2Ah,AH=2Ch
Format of date/time buffer: Offset Size Description 00h BYTE year - 1900 01h BYTE month (1=Jan) 02h BYTE day 03h BYTE hours 04h BYTE minutes 05h BYTE seconds 06h BYTE day of week (0 = Sunday) (Novell and NTNX only) ———-21E7——————————- INT 21 - OS/286, OS/386 - CREATE CODE SEGMENT
AH = E7h ???
Return: ??? SeeAlso: AH=E8h“OS/286”,AH=E9h“OS/286”,AH=EAh“OS/286” ———-21E7——————————- INT 21 - VIRUS - “Spyer”/“Kiev” - INSTALLATION CHECK
AH = E7h
Return: AH = 78h if resident SeeAlso: AH=E4h“VIRUS”,AX=EC59h ———-21E8——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - SET FCB RE-OPEN MODE
AH = E8h DL = mode 00h no automatic re-open 01h auto re-open
Return: AL = error code ———-21E8——————————- INT 21 - OS/286, OS/386 - SEGMENT CREATION
AH = E8h AL = type 00h data segment 01h data window/alias 02h real segment 03h real window/alias 06h shareable segment ???
Return: ??? SeeAlso: AH=E7h“OS/286”,AH=E9h“OS/286” ———-21E8——————————- INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS
AH = E8h AL = 00h set flags for this program = 01h set flags for other program DX = keyboard control flags (bit set enables, cleared disables bit 0: menu bit 1: exchange bit 2: entire keyboard enable/disable bit 3: Ctrl-C bit 4: Ctrl-PrtSc bit 5: Alt/Erase bit 6: Ctrl-Break bit 7: Ctrl-NumLock bit 8: shift-PrtSc bit 9-13: undefined bit 14: cancel key (clear keyboard buffer) bit 15: suspend key
Return: DX = previous flags Notes: disabling Ctrl-PrtSc will allow the program to intercept the keystroke;
disabling any of the other keystrokes disables them completely identical to AH=F8h
SeeAlso: AH=E1h“DoubleDOS”,AH=E2h“DoubleDOS”,AH=E3h“DoubleDOS” SeeAlso: AH=F8h“DoubleDOS” ———-21E9——————————- INT 21 P - OS/286, OS/386 - CHANGE SEGMENTS
AH = E9h AL = function 01h change code segment parameters 02h change data segment parameters 05h adjust segment limit 06h change segment base address ???
Return: ??? SeeAlso: AH=E7h“OS/286”,AH=E8h“OS/286”,AH=EAh“OS/286”,AH=EDh“OS/286” SeeAlso: INT 31/AX=0007h,INT 31/AX=0008h ———-21E9——————————- INT 21 - DoubleDOS - SET TIMESHARING PRIORITY
AH = E9h AL = 00h visible program gets 70%, invisible gets 30% (default) = 01h visible program gets 50%, invisible gets 50% = 02h visible program gets 30%, invisible gets 70% = 03h Top program gets 70%, bottom program gets 30% = 04h Top program gets 30%, bottom program gets 70% = 05h get current priority Return: AL = priority setting
Note: identical to AH=F9h SeeAlso: AH=EAh“DoubleDOS”,AH=EBh“DoubleDOS”,AH=F9h“DoubleDOS” ———-21E900—————————– INT 21 - Novell NetWare 4.6, Alloy NTNX - SHELL'S “GET BASE STATUS”
AX = E900h DX = drive number to check (0 = A:)
Return: AL = network pathbase
AH = base flags 00h drive not currently mapped to a base 01h drive is mapped to a permanent base 02h drive is mapped to a temporary base 03h drive exists locally
———-21E905—————————– INT 21 - Novell NetWare shell 3.01 - MAP A FAKE ROOT DIRECTORY
AX = E905h BL = drive number (0=default, 1=A:, ...) DS:DX -> ASCIZ path for fake root (may include server name or be empty)
Return: CF set on error
AL = error code (03h,0Fh,11h) (see AH=59h) CF clear if successful
Note: if drive is not currently mapped, a drive mapping will be created SeeAlso: AX=E906h ———-21E906—————————– INT 21 - Novell NetWare shell 3.01 - DELETE FAKE ROOT DIRECTORY
AX = E906h BL = drive number (0=default, 1=A:, ...)
Note: drive remains mapped SeeAlso: AX=E905h ———-21E907—————————– INT 21 - Novell NetWare shell 3.01 - GET RELATIVE DRIVE DEPTH
AX = E907h BL = drive number (0=default, 1=A:, ...)
Return: AL = number of directories below the fake root
FFh if no fake root assigned
SeeAlso: AX=E905h ———-21E908BL00————————- INT 21 - Novell NetWare shell 3.01 - SET SHOW DOTS
AX = E908h BL = 00h don't return '.' or '..' during directory scans = nonzero directory scans will return '.' or '..' entries
Return: BL = previous show-dots setting ———-21EA——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - RETURN SHELL VERSION
AH = EAh AL = return version environment string 00h don't return string nonzero return string in 40-byte buffer pointed to by ES:DI Return: buffer filled with three null-terminated entries: major operating system version hardware type
Return: AH = operating system (00h = MSDOS)
AL = hardware type 00h IBM PC 01h Victor 9000 BH = major shell version BL = minor shell version CH = (v3.01+) shell type 00h conventional memory 01h expanded memory 02h extended memory CL = shell revision number
———-21EA——————————- INT 21 - DoubleDOS - TURN OFF TASK SWITCHING
AH = EAh
Return: task switching turned off SeeAlso: AH=E9h“DoubleDOS”,AH=EBh“DoubleDOS”,AH=FAh“DoubleDOS” SeeAlso: INT FA“DoubleDOS” ———-21EA——————————- INT 21 - OS/286, OS/386 - ALLOCATE HUGE SEGMENT
AH = EAh ???
Return: ??? Note: protected mode only??? SeeAlso: AH=E7h“OS/286”,AH=E8h“OS/286”,AH=E9h“OS/286” ———-21EB——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG FILE
AH = EBh DS:DX -> ASCIZ filename if function C6h lock mode 01h: AL = flags 00h log file only 01h lock as well as log file BP = lock timeout in timer ticks (1/18 second)
Return: AL = error code
00h successful 96h no dynamic memory for file FEh timed out FFh failed
SeeAlso: AH=CAh,AH=ECh“Novell” ———-21EB——————————- INT 21 - DoubleDOS - TURN ON TASK SWITCHING
AH = EBh
Return: task switching turned on SeeAlso: AH=E9h“DoubleDOS”,AH=EAh“DoubleDOS”,AH=FBh“DoubleDOS” SeeAlso: INT FB“DoubleDOS” ———-21EB00—————————– INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY LINEAR ADDRESS
AX = EB00h ???
Return: ??? Note: protected mode only??? SeeAlso: AX=EB02h,AX=EB04h,INT 31/AX=0506h ———-21EB02—————————– INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 16-BIT SEGMENT:OFFSET
AX = EB02h ???
Return: ??? Note: protected mode only??? SeeAlso: AX=EB00h,AX=EB04h ———-21EB03—————————– INT 21 - OS/386 VMM - FREE MAPPED PAGES
AX = EB03h ???
Return: ??? Note: protected mode only??? SeeAlso: AX=EB05h,INT 31/AX=0801h ———-21EB04—————————– INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 32-BIT SEGMENT:OFFSET
AX = EB04h ???
Return: ??? Note: protected mode only??? SeeAlso: AX=EB00h,AX=EB02h ———-21EB05—————————– INT 21 - OS/386 VMM - MAP PAGES
AX = EB05h ???
Return: ??? Note: protected mode only??? SeeAlso: AX=EB03h,INT 31/AX=0800h ———-21EB06—————————– INT 21 - OS/386 VMM - LOCK PAGES IN MEMORY
AX = EB06h ???
Return: ??? Note: protected mode only??? SeeAlso: AX=EB07h,INT 31/AX=0600h ———-21EB07—————————– INT 21 - OS/386 VMM - UNLOCK MEMORY PAGES
AX = EB07h ???
Return: ??? Note: protected mode only??? SeeAlso: AX=EB06h,INT 31/AX=0601h ———-21EC——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE FILE
AH = ECh DS:DX -> ASCIZ filename
Return: none SeeAlso: AH=EBh“Novell” ———-21EC——————————- INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS
AH = ECh
Return: ES = segment of virtual screen Notes: screen address can change if task-switching is on!!
identical to AH=FCh
SeeAlso: AH=FCh“DoubleDOS”,INT FC“DoubleDOS” ———-21EC——————————- INT 21 - OS/286, OS/386 - BLOCK TRANSFER
AH = ECh ???
Return: ??? ———-21EC59—————————– INT 21 - VIRUS - “Terror” - INSTALLATION CHECK
AX = EC59h
Return: BP = EC59h if resident SeeAlso: AH=E7h“VIRUS”,AH=EEh“VIRUS” ———-21ED——————————- INT 21 - Novell NetWare, Alloy NTNX - CLEAR FILE
AH = EDh DS:DX -> ASCIZ filename
Return: AL = error code SeeAlso: AH=CEh,AH=EBh“Novell” ———-21ED——————————- INT 21 - OS/286, OS/386 - GET SEGMENT OR WINDOW DESCRIPTOR
AH = EDh ???
Return: ??? Note: protected mode only??? SeeAlso: AH=E9h“OS/286” ———-21EE——————————- INT 21 - Novell NetWare 4.6, Alloy NTNX - GET PHYSICAL STATION NUMBER
AH = EEh
Return: CX:BX:AX = six-byte address ———-21EE——————————- INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS
AH = EEh AL = number of 55ms time slices to give away
Return: returns after giving away time slices SeeAlso: AH=FEh“DoubleDOS”,INT FE“DoubleDOS” ———-21EE——————————- INT 21 - VIRUS - “Jerusalem-G”, “Pregnant” - INSTALLATION CHECK
AH = EEh
Return: AX = 0300h if “Jerusalem-G” resident
AL = 05h if "Pregnant" resident
SeeAlso: AH=DDh“VIRUS”,AX=EC59h,AH=F0h“VIRUS” ———-21EF——————————- INT 21 - Novell Advanced NetWare 1.0+ - GET DRIVE INFO
AH = EFh AL = subfunction 00h get drive handle table 01h get drive flag table 02h get drive connection ID table 03h get connection ID table (see below) 04h get file server name table
Return: ES:DI → shell status table Note: drive handle, flag, and connection ID tables each contain 32 entries
Format of connection ID table: Offset Size Description 00h BYTE in use flag
E0h AES temporary F8h IPX in critical section FAh processing FBh holding FCh AES waiting FDh waiting FEh receiving FFh sending
01h BYTE order number 02h DWORD file server's network address (high byte first) 06h 6 BYTEs file server's node address (high byte first) 0Ch WORD socket number (high byte first) 0Eh WORD base receive timeout in clock ticks (high byte first) 10h 6 BYTEs preferred routing node (high byte first) 16h BYTE packet sequence number 17h BYTE connection number 18h BYTE connection status (FFh if active) 19h WORD maximum receive timeout in clock ticks (high byte first) 1Bh 5 BYTEs reserved
Values in drive flag table: 00h drive is not mapped 01h permanent network drive 02h temporary network drive 80h mapped to local drive 81h local drive used as permanent network drive 82h local drive used as temporary network drive ———-21F0——————————- INT 21 - Novell Advanced NetWare 1.0+ - CONNECTION ID
AH = F0h AL = subfunction 00h set preferred connection ID 01h get preferred connection ID 02h get default connection ID 03h LPT capture active 04h set primary connection ID 05h get primary connection ID DL = preferred file server
Return: AL = selected file server ———-21F0——————————- INT 21 - DoubleDOS - MENU CONTROL
AH = F0h AL = subfunction 01h exchange tasks 73h resume invisible job if suspended 74h kill other job 75h suspend invisible job
Note: identical to AH=E0h SeeAlso: AH=E0h“DoubleDOS” ———-21F0——————————- INT 21 - VIRUS - “Frere Jacques” - INSTALLATION CHECK
AH = F0h
Return: AX = 0300h if resident SeeAlso: AH=EEh“VIRUS”,AH=F1h“VIRUS” ———-21F1——————————- INT 21 - Novell Advanced NetWare 1.0+ - FILE SERVER CONNECTION
AH = F1h AL = subfunction 00h attach to file server DL = preferred file server 01h detach from file server DL = connection ID 02h logout from file server DL = connection ID
Return: AL = completion code ———-21F1——————————- INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB
AH = F1h
SeeAlso: AH=E1h“DoubleDOS”,AH=F2h“DoubleDOS”,AH=F3h“DoubleDOS” SeeAlso: AH=F8h“DoubleDOS” ———-21F1——————————- INT 21 - VIRUS - “F1-337” - ???
AH = F1h ???
Return: ??? SeeAlso: AH=F0h“VIRUS”,AX=F2AAh ———-21F2——————————- INT 21 - Novell NetWare v3.01+ shell interface - MULTIPLEXOR
AH = F2h AL = function 15h broadcast services (see AH=E1h) 17h connection control (see AH=E3h) DS:SI -> request buffer ES:DI -> reply buffer
Return: ??? Notes: this is a multiplexor to access other net interface functions which
were accessed via a separate AH function in older versions the function number in AL is added to CCh to get the old function number which is desired
———-21F2——————————- INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB
AH = F2h AL = character
Return: AL = 00h successful
01h buffer full (128 characters)
SeeAlso: AH=E2h“DoubleDOS”,AH=F1h“DoubleDOS”,AH=F3h“DoubleDOS” SeeAlso: AH=F8h“DoubleDOS” ———-21F2AA—————————– INT 21 - VIRUS - “PcVrsDs” - INSTALLATION CHECK
AX = F2AAh
Return: AH = AAh if resident SeeAlso: AH=F1h“VIRUS”,AH=F3h“VIRUS” ———-21F3——————————- INT 21 - Novell Advanced NetWare 2.0+ - FILE SERVER FILE COPY
AH = F3h ES:DI -> request string (see below)
Return: AL = status/error code
CX:DX = number of bytes copied
Format of request string: Offset Size Description 00h WORD source file handle 02h WORD destination file handle 04h DWORD starting offset in source 08h DWORD starting offset in destination 0Ch DWORD number of bytes to copy ———-21F3——————————- INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB
AH = F3h AL = character
Return: AL = 00h successful
01h buffer full (128 characters)
SeeAlso: AH=E3h“DoubleDOS”,AH=F1h“DoubleDOS”,AH=F2h“DoubleDOS” SeeAlso: AH=F8h“DoubleDOS” ———-21F3——————————- INT 21 - VIRUS - “Carfield” - INSTALLATION CHECK
AH = F3h
Return: AX = 0400h if resident SeeAlso: AH=D5h“Carfield”,AX=F2AAh,AH=F7h“VIRUS” ———-21F400—————————– INT 21 - DoubleDOS - INSTALLATION CHECK/PROGRAM STATUS
AX = F400h
Return: AL = 00h if DoubleDOS not present
= 01h if running in visible DoubleDOS partition = 02h if running in the invisible DoubleDOS partition
SeeAlso: AX=E400h,AH=F5h“DoubleDOS” ———-21F5——————————- INT 21 - DoubleDOS - OTHER PROGRAM STATUS
AH = F5h
Return: AL = 00h no program in other partition
= 01h program in other partition is running = 02h program in other partition is suspended
SeeAlso: AH=E5h“DoubleDOS”,AX=F400h“DoubleDOS” ———-21F7——————————- INT 21 - VIRUS - “GP1” - INSTALLATION CHECK
AH = F7h
Return: AX = 0300h if resident SeeAlso: AH=F0h“VIRUS”,AH=FBh“VIRUS” ———-21F8——————————- INT 21 - DOS v??? - SET OEM INT 21 HANDLER
AH = F8h DS:DX -> OEM INT 21 handler for functions F9h to FFh FFFFh:FFFFh resets to original handlers
Notes: calls to AH=F9h through AH=FFH will return CF set and AX=1 (invalid
function) if no handler set handler is called with all registers exactly as set by caller, and should exit with IRET
SeeAlso: AH=F9h“OEM” ———-21F8——————————- INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS
AH = F8h AL = 00h set flags for this program = 01h set flags for other program DX = keyboard control flags (bit set enables, cleared disables) bit 0: menu bit 1: exchange bit 2: entire keyboard enable/disable bit 3: Ctrl-C bit 4: Ctrl-PrtSc bit 5: Alt/Erase bit 6: Ctrl-Break bit 7: Ctrl-NumLock bit 8: shift-PrtSc bit 9-13: undefined bit 14: cancel key (clear keyboard buffer) bit 15: suspend key
Return: DX = previous flags Notes: disabling Ctrl-PrtSc will allow the program to intercept the keystroke;
disabling any of the other keystrokes disables them completely identical to AH=E8h
SeeAlso: AH=E8h“DoubleDOS”,AH=F1h“DoubleDOS”,AH=F2h“DoubleDOS” SeeAlso: AH=F3h“DoubleDOS” ———-21F9——————————- INT 21 - DOS v??? - OEM FUNCTION
AH = F9h
SeeAlso: AH=F8h“OEM”,AH=FAh“OEM” ———-21F9——————————- INT 21 - DoubleDOS - SET TIMESHARING PRIORITY
AH = F9h AL = 00h visible program gets 70%, invisible gets 30% (default) = 01h visible program gets 50%, invisible gets 50% = 02h visible program gets 30%, invisible gets 70% = 03h Top program gets 70%, bottom program gets 30% = 04h Top program gets 30%, bottom program gets 70% = 05h get current priority Return: AL = priority setting
Note: identical to AH=E9h SeeAlso: AH=E9h“DoubleDOS”,AH=FAh“DoubleDOS”,AH=FBh“DoubleDOS” ———-21FA——————————- INT 21 - DOS v??? - OEM FUNCTION
AH = FAh
SeeAlso: AH=F9h“OEM”,AH=FBh“OEM” ———-21FA——————————- INT 21 - DoubleDOS - TURN OFF TASK SWITCHING
AH = FAh
Return: task switching turned off SeeAlso: AH=EAh“DoubleDOS”,AH=F9h“DoubleDOS”,AH=FBh“DoubleDOS” SeeAlso: INT FA“DoubleDOS” ———-21FA–DX5945———————– INT 21 - PC Tools 7 VDEFEND - API
AH = FAh DX = 5945h AL = function 00h NOP 01h uninstall Return: CF clear if successful DI = 4559h 02h ??? BL = ??? Return: CF clear CL = old value of ???
SeeAlso: INT 2F/AX=6282h ———-21FB——————————- INT 21 - DOS v??? - OEM FUNCTION
AH = FBh
SeeAlso: AH=FAh“OEM”,AH=FCh“OEM” ———-21FB——————————- INT 21 - DoubleDOS - TURN ON TASK SWITCHING
AH = FBh
Return: task switching turned on SeeAlso: AH=EBh“DoubleDOS”,AH=F9h“DoubleDOS”,AH=FAh“DoubleDOS” SeeAlso: INT FB“DoubleDOS” ———-21FB——————————- INT 21 - VIRUS - “Cinderella” - INSTALLATION CHECK
AH = FBh
Return: AH = 00h if resident SeeAlso: AH=F7h“VIRUS”,AX=FB0Ah ———-21FB0A—————————– INT 21 - VIRUS - “dBASE” - INSTALLATION CHECK
AX = FB0Ah
Return: AX = 0AFBh if resident SeeAlso: AH=FBh“VIRUS”,AH=FCh“VIRUS” ———-21FC——————————- INT 21 - DOS v??? - OEM FUNCTION
AH = FCh
SeeAlso: AH=FBh“OEM”,AH=FDh“OEM” ———-21FC——————————- INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS
AH = FCh
Return: ES = segment of virtual screen Notes: screen address can change if task-switching is on!!
identical to AH=ECh
SeeAlso: AH=ECh“DoubleDOS”,INT FC“DoubleDOS” ———-21FC——————————- INT 21 - VIRUS - “Troi” - INSTALLATION CHECK
AH = FCh
Return: AL = A5h if resident SeeAlso: AH=FB0Ah“VIRUS”,AH=FDh“VIRUS” ———-21FD——————————- INT 21 - DOS v??? - OEM FUNCTION
AH = FDh
SeeAlso: AH=FCh“OEM”,AH=FEh“DOS” ———-21FD——————————- INT 21 - VIRUS - “Border” - INSTALLATION CHECK
AH = FDh
Return: AH = 13h if resident SeeAlso: AH=FCh“VIRUS”,AH=FEh“VIRUS” ———-21FE——————————- INT 21 - DOS v??? - OEM FUNCTION
AH = FEh
SeeAlso: AH=FDh“OEM”,AH=FFh“OEM” ———-21FE——————————- INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS
AH = FEh AL = number of 55ms time slices to give away
Return: returns after giving away time slices SeeAlso: AH=EEh“DoubleDOS”,INT FE“DoubleDOS” ———-21FE——————————- INT 21 - VIRUS - “483” - INSTALLATION CHECK
AH = FEh
Return: AH = 00h if resident SeeAlso: AH=FDh“VIRUS”,AX=FE01h ———-21FE01—————————– INT 21 - VIRUS - “Flip” - INSTALLATION CHECK
AX = FE01h
Return: AX = 01FEh if resident SeeAlso: AH=FEh“VIRUS”,AX=FE02h ———-21FE02—————————– INT 21 - VIRUS - “2468”/“Tequila” - INSTALLATION CHECK
AX = FE02h
Return: AX = 01FDh if resident SeeAlso: AX=FE01h,AX=FEDCh“VIRUS” ———-21FEDC—————————– INT 21 - PCMag PCMANAGE/DCOMPRES - INSTALLATION CHECK
AX = FEDCh
Return: AX = CDEFh if installed SeeAlso: AH=DCh ———-21FEDC—————————– INT 21 - VIRUS - “Black Monday” - INSTALLATION CHECK
AX = FEDCh
Return: AL = DCh if resident SeeAlso: AX=FE02h,AH=FFh“VIRUS” ———-21FF——————————- INT 21 - DOS v??? - OEM FUNCTION
AH = FFh
SeeAlso: AH=FEh“OEM” ———-21FF——————————- INT 21 - CED (Command EDitor) - INSTALLABLE COMMANDS
AH = FFH AL = subfunction 00h add installable command BL = mode - bit 0 = 1 callable from DOS prompt bit 1 = 1 callable from application DS:SI -> CR-terminated command name ES:DI -> FAR routine entry point 01h remove installable command DS:SI -> CR-terminated command name 02h reserved, may be used to test for CED installation
Return: CF clear if successful
CF set on error AX = 01h invalid function 02h command not found (subfunction 01h only) 08h insufficient memory (subfunction 00h only) 0Eh bad data (subfunction 00h only) AH = FFh if CED not installed
Note: CED is a shareware DOS command-line enhancer by Christopher J. Dunford SeeAlso: AX=0A00h ———-21FF——————————- INT 21 - DJ GO32.EXE 80386+ DOS extender - DOS EXTENSIONS
AH = FFh AL = function 01h create file 02h open file 03h get file statistics 04h get time of day 05h set time of day 06h stat 07h system
SeeAlso: INT 10/AH=FFh“GO32” ———-21FF——————————- INT 21 - DOSED.COM - INSTALLATION CHECK
AH = FFh DS:SI -> "DOSED" ES = 0000h
Return: ES:DI → “DOSED” if installed Note: DOSED is a free DOS commandline editor/history buffer by Sverre H.
Huseby
———-21FF——————————- INT 21 - Topware Network Operating System - ???
AH = FFh ???
Return: ??? SeeAlso: INT 2F/AX=FF00h ———-21FF——————————- INT 21 - VIRUS - “Sunday”, “Tumen 0.5”, “Hero” - INSTALLATION CHECK
AH = FFh
Return: AH = 00h if “Tumen 0.5” or “Hero” resident
AX = 0400h if "Sunday" resident
SeeAlso: AX=FEDCh“VIRUS”,AX=FF0Fh ———-21FF00DX0078———————– INT 21 - Rational Systems DOS/4G - INSTALLATION CHECK
AX = FF00h DX = 0078h
Return: AL <> 00h if installed
GS = segment of kernel if nonzero
SeeAlso: INT 15/AX=BF02h ———-21FF0F—————————– INT 21 - FLU_SHOT+ v1.83 - INSTALLATION CHECK
AX = FF0Fh
Return: AX = 0101h if resident Notes: FLU_SHOT+ is an antivirus/antitrojan program by Ross M. Greenberg and
Software Concepts Design the "PSQR/1720" virus calls this function to determine whether FLU_SHOT+ is present
SeeAlso: AH=FFh“VIRUS”,AX=FF10h ———-21FF10—————————– INT 21 - VIRUS - “Twins” - INSTALLATION CHECK
AX = FF10h
Return: AL = 07h if resident SeeAlso: AX=FF0Fh,AX=FFFEh ———-21FFFE—————————– INT 21 - VIRUS - “08/15”/“Many Fingers” - INSTALLATION CHECK
AX = FFFEh
Return: AX = 0815h if resident SeeAlso: AX=FF10h,AX=FFFFh ———-21FFFF—————————– INT 21 - VIRUS - “Ontario”, “Year 1992”/“B1M92” - INSTALLATION CHECK
AX = FFFFh
Return: AX = 0000h if “Ontario” resident
AX = 07C2h (1992) if "Year 1992"/"B1M92" resident
SeeAlso: AX=FF0Fh,AX=FFFFh/CX=0000h,INT 6B“VIRUS” ———-21FFFFCX0000———————– INT 21 - VIRUS - “Revenge” - INSTALLATION CHECK
AX = FFFFh CX = 0000h
Return: CX = 0006h if resident SeeAlso: AX=FFFFh,INT 6B“VIRUS”