Table des matières

MSDOS - Interrupt List 21h

00h - DOS 1+ - TERMINATE PROGRAM

	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

01h - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO

	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

02h - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT

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

03h - DOS 1+ - READ CHARACTER FROM STDAUX

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

04h - DOS 1+ - WRITE CHARACTER TO STDAUX

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

05h - DOS 1+ - WRITE CHARACTER TO PRINTER

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

06h - DOS 1+ - DIRECT CONSOLE OUTPUT

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

06h - FFh - DOS 1+ - DIRECT CONSOLE INPUT

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

07h - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO

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

08h - DOS 1+ - CHARACTER INPUT WITHOUT ECHO

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

09h - DOS 1+ - WRITE STRING TO STANDARD OUTPUT

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”

0Ah

0Ah - DOS 1+ - BUFFERED INPUT

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

0A00h - WCED v1.6 - INSTALLATION CHECK

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”

0Bh

0Bh - DOS 1+ - GET STDIN STATUS

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

0B56h - VIRUS - "Perfume" - INSTALLATION CHECK

AX = 0B56h

Return: AX = 4952h if resident SeeAlso: AX=0D20h

0Ch - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT

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

0Dh

0Dh - DOS 1+ - DISK RESET

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

0D20h - VIRUS - "Crazy Imp" - INSTALLATION CHECK

AX = 0D20h

Return: AX = 1971h if resident SeeAlso: AX=0B56h,AH=30h/DX=ABCDh

0Eh - DOS 1+ - SELECT DEFAULT DRIVE

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

0Fh - DOS 1+ - OPEN FILE USING FCB

	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

Format of File Control Block:

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

Format of reserved field for DOS 1.0:

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

Format of reserved field for DOS 1.10-1.25:

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

Format of reserved field for DOS 2.x:

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 ???

Format of reserved field for DOS 3.x:

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.

10h - DOS 1+ - CLOSE FILE USING FCB

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

11h - DOS 1+ - FIND FIRST MATCHING FILE USING FCB

	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

12h - DOS 1+ - FIND NEXT MATCHING FILE USING FCB

	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

13h - DOS 1+ - DELETE FILE USING FCB

	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

14h - DOS 1+ - SEQUENTIAL READ FROM FCB FILE

	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

15h - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE

	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

16h - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB

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

17h - DOS 1+ - RENAME FILE USING FCB

	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

18h - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY

	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

19h - DOS 1+ - GET CURRENT DEFAULT DRIVE

	AH = 19h
Return: AL = drive (00h = A:, 01h = B:, etc)

SeeAlo: AH=0Eh,AH=47h

1Ah - DOS 1+ - SET DISK TRANSFER AREA ADDRESS

	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

1Bh - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE

	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:

FFhfloppy, double-sided, 8 sectors per track (320K)
FEhfloppy, single-sided, 8 sectors per track (160K)
FDhfloppy, double-sided, 9 sectors per track (360K)
FChfloppy, single-sided, 9 sectors per track (180K)
F9hfloppy, double-sided, 15 sectors per track (1.2M)
F8hhard disk
F0hother

1Ch - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE

	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

1Dh - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY

	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

1Eh - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY

	AH = 1Eh
Return: AL = 00h

corresponds to a CP/M BDOS function which is meaningless under MSDOS

SeeAlso: AH=18h,AH=1Dh,AH=20h

1Fh - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE

	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
00hBYTEsequential device ID
01hBYTElogical drive number (0=A:)
02hWORDbytes per sector
04hBYTEhighest sector number within a cluster
05hBYTEshift count to convert clusters into sectors
06hWORDstarting sector number of first FAT
08hBYTEnumber of copies of FAT
09hWORDnumber of directory entries
0BhWORDnumber of first data sector
0DhWORDhighest cluster number (number of data clusters + 1)
0FhBYTEsectors per FAT
10hWORDstarting sector of directory
12hWORDaddress of allocation table

the DOS 1.0 table is the same except that the first and last fields are missing

20h - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY

	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

21h - DOS 1+ - READ RANDOM RECORD FROM FCB FILE

	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

22h - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE

	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

23h - DOS 1+ - GET FILE SIZE FOR FCB

	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

24h - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB

	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

25h - DOS 1+ - SET INTERRUPT VECTOR

	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

25xxh - Phar Lap 386/DOS-Extender

2501h - Phar Lap 386/DOS-Extender - RESET 386/DOS-EXTENDER DATA STRUCTURES

	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”

2502h - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR

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

2503h - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR

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

2504 - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR

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

2505h - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR

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

2506h - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CONTRL IN PROT MODE

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.

2507h - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS

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

2508h - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS

AX = 2508h
BX = segment selector

Return: CF clear if successful

    ECX = linear base address of segment
CF set if invalid segment selector

2509h - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS

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

250Ah - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT

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

250Ch - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS

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

250Eh - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE

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

250Fh - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS

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

2510h - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS

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

2511h - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT

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

2512h - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING

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

2513h - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR

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

2514h - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES

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

2515h - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES

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

2516h - Phar Lap 386/DOS-Extender - FREE ALL MEMORY OWNED BY LDT

AX = 2516h
???

Return: ???

2517h - Phar Lap 386/DOS-Extender - GET INFO ON DOS DATA BUFFER

AX = 2517h
???

Return: ???

2518h - Phar Lap 386/DOS-Extender - SPECIFY HANDLER FOR MOVED SEGMENTS

AX = 2518h
???

Return: ???

2519h - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO

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

251Ah - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY

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

251Bh - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES

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

251Dh - Phar Lap 386/DOS-Extender VMM - READ PAGE-TABLE ENTRY

AX = 251Dh
???

Return: ??? SeeAlso: AX=251Eh,AX=EB00h,INT 31/AX=0506h

251Eh - Phar Lap 386/DOS-Extender VMM - WRITE PAGE-TABLE ENTRY

AX = 251Eh
???

Return: ??? SeeAlso: AX=251Dh,INT 31/AX=0507h

251Fh - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES

AX = 251Fh
???

Return: ??? SeeAlso: AX=251Dh,AX=251Eh

2520h - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS

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)

2521h - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEMORY USAGE

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

2522h - Phar Lap 386/DOS-Extender VMM - SPECIFY ALTERNATE PAGE-FAULT HANDLER

AX = 2522h
???

Return: ??? SeeAlso: AX=2523h

2523h - Phar Lap 386/DOS-Extender VMM - SPECIFY OUT-OF-SWAP-SPACE HANDLER

AX = 2523h
???

Return: ??? SeeAlso: AX=2522h

2524h - Phar Lap 386/DOS-Extender VMM - INSTALL PAGE-REPLACEMENT HANDLERS

AX = 2524h
???

Return: ???

2525h - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENTIONAL MEM USAGE

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

2526h - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION

AX = 2526h
???

Return: ???

25C0h - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK

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

25C1h - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK

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

25C2h - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK

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

25C3h - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM

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

26h - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX

	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

Format of PSP:
Offset Size Description
00h2 BYTEs INT 20 instruction for CP/M CALL 0 program termination
02hWORD segment of first byte beyond memory allocated to program
04hBYTE unused filler
05hBYTE CP/M CALL 5 service request (FAR JMP to 000C0h)
BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
06hWORD CP/M compatibility–size of first segment for .COM files
08h2 BYTEs remainder of FAR JMP at 05h
0AhDWORD stored INT 22 termination address
0EhDWORD stored INT 23 control-Break handler address
12hDWORD DOS 1.1+ stored INT 24 critical error handler address
16hWORD segment of parent PSP
18h20 BYTEs DOS 2+ Job File Table, one byte per file handle, FFh = closed
2ChWORD DOS 2+ segment of environment for process
2EhDWORD DOS 2+ process's SS:SP on entry to last INT 21 call
32hWORD DOS 3+ number of entries in JFT (default 20)
34hDWORD DOS 3+ pointer to JFT (default PSP:0018h)
38hDWORD 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
48hBYTE (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

Format of environment block:
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

27h - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE

	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

28h - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE

	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

29h - DOS 1+ - PARSE FILENAME INTO FCB

	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

2Ah - DOS 1+ - GET SYSTEM DATE

	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

2Bh

2Bh - DOS 1+ - SET SYSTEM DATE

	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

2Bh - AI Architects - ??? - INSTALLATION CHECK

	AH = 2Bh
	CX = 4149h ('AI')
	DX = 413Fh ('A?')
Return: AL <> FFh if installed

Borland's TKERNEL makes this call

2Bh - PC Tools v5.x PC-Cache - INSTALLATION CHECK

	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

2Bh - DESQview - INSTALLATION CHECK

	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

2Bh - ELRES v1.1 - INSTALLATION CHECK

	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

Format of ELRES history structure:
Offset Size Description
00hWORDnumber of return codes which can be stored by following buffer
02hWORDcurrent position in buffer (treated as a ring)
04hN BYTEsELRES buffer

2Bh - TAME v2.10+ - INSTALLATION CHECK

	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

Format of TAME 2.10-2.20 data area:
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 ???
Format of TAME 2.30 data area:
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
Format of TAME 2.60 data area:
Offset Size Description
00hBYTEdata structure minor version number (02h in TAME 2.60)
01hBYTEdata structure major version number (0Bh in TAME 2.60)
02hDWORDnumber of task switches
06hDWORDnumber of keyboard polls
0AhDWORDnumber of time polls
0EhDWORDnumber of times DESQview told program runs only in foreground
12hDWORDtime of last /CLEAR or TAME-RES load
16hDWORDtime yielded
1AhDWORDtime spent polling
1EhDWORDtime spent waiting on key input with INT 16/AH=01h,11h
22h4 BYTEs???
26hDWORDoriginal INT 10h
2AhDWORDoriginal INT 14h
2EhDWORDoriginal INT 15h
32hDWORDoriginal INT 16h
36hDWORDoriginal INT 17h
3AhDWORDoriginal INT 21h
3EhDWORDoriginal INT 28h
42hWORDoffset of TAME INT 10h handler
44hWORDoffset of TAME INT 14h handler
46hWORDoffset of TAME INT 15h handler
48hWORDoffset of TAME INT 16h handler
4AhWORDoffset of TAME INT 17h handler
4ChWORDoffset of TAME INT 21h handler
4EhWORDoffset of TAME INT 28h handler
50hWORDX in /max:X,Y or /freq:X,Y
52hWORDY in /max:X,Y or /freq:X,Y
54hWORDnumber of polls remaining before next task switch
56hWORD/KEYIDLE value
58h4 BYTEs???
5ChWORDX in /boost:X,Y
5EhWORDY in /boost:X,Y
60hWORD/FG: value
62hWORDtask switches left until next FGONLY DESQview API call
64hWORDmultitasker version ???
66hWORDvirtual screen segment
68hBYTEflags 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
69hBYTEflags for interrupts which may be acted on (same bits as above)
6AhBYTEwindow or task number for this task
6BhBYTEmultitasker type
01h DESQview
02h DoubleDOS
03h TopView
04h OmniView
05h VM/386
6ChBYTEtype 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
6DhBYTEwatch_DOS
6EhBYTEbit 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
6FhBYTEold status
70hWORD

2Bh - pcANYWHERE IV/LAN - INSTALLATION CHECK

	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
Format of initialization request structure:
Offset Size Description
00hBYTEoperating mode:
00h wait for a call
01h hot key activates
02h incoming call activates
03h initiate a call
01h3 BYTEsuser ID to append to config file names
04hWORDDS-relative pointer to path for config files
06hWORDDS-relative pointer to path for program files
Format of termination request structure:
Offset Size Description
00hBYTE 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
Values for function status:
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

2Ch - DOS 1+ - GET SYSTEM TIME

	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

2Dh - DOS 1+ - SET SYSTEM TIME

	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”

2Eh - DOS 1+ - SET VERIFY FLAG

	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

2Fh - DOS 2+ - GET DISK TRANSFER AREA ADDRESS

	AH = 2Fh
Return: ES:BX -> current DTA

SeeAlso: AH=1Ah

30h - DOS 2+ - GET DOS VERSION

	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

30h - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK

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

30h - VIRUS - "Possessed" - INSTALLATION CHECK

AH = 30h
DX = ABCDh

Return: DX = DCBAh if installed SeeAlso: AX=0D20h,AX=30F1h

3000h Btrieve Multi-User - INSTALLATION CHECK

	AX = 3000h
Return: AL >= 03h if INT 2F handler installed

SeeAlso: INT 2F/AX=AB00h,INT 7B“Btrieve”,INT 7F/AX=0200h

3000h - CTask 2.0+ - INSTALLATION CHECK

	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

30F1h - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK

	AX = 30F1h
Return: AL = 00h if resident

SeeAlso: AH=30h/DX=ABCDh,AX=330Fh

31h - DOS 2+ - TERMINATE AND STAY RESIDENT

	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

32h - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE

	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

Format of DOS Drive Parameter Block:

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

33h - DOS 2+ - EXTENDED BREAK CHECKING

	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

33xxh

3302h - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE

	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

3305h - DOS 4+ - GET BOOT DRIVE

	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

3306h - DOS 5.0 - GET TRUE VERSION NUMBER

	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

3306h - CBIS POWERLAN - NETWORK REDIRECTOR - ???

	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”

330Fh - VIRUS - "Burghofer" - INSTALLATION CHECK

	AX = 330Fh
Return: AL = 0Fh if resident (DOS returns AL=FFh)

SeeAlso: AX=30F1h,AX=33E0h

33E0h - VIRUS - "Oropax" - INSTALLATION CHECK

	AX = 33E0h
Return: AL = E0h if resident (DOS returns AL=FFh)

SeeAlso: AX=330Fh,AX=357Fh

34h - DOS 2+ - GET ADDRESS OF INDOS FLAG

	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

35h - DOS 2+ - GET INTERRUPT VECTOR

	AH = 35h
	AL = interrupt number
Return: ES:BX -> current interrupt handler

SeeAlso: AH=25h,AX=2503h

357Fh - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK

	AX = 357Fh
Return: DX = FFFFh if installed

SeeAlso: AX=33E0h,AX=3DFFh

36h - DOS 2+ - GET FREE DISK SPACE

	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

37h

3700h - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER

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

3701h - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER

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

37h - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE

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

38h - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION

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)

38h - DOS 3+ - SET COUNTRY CODE

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

39h - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY

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

3Ah - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY

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

3Bh - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY

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

3Ch - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE

	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

3Dh - DOS 2+ - "OPEN" - OPEN EXISTING FILE

	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

3DFFh - VIRUS - "JD-448" - INSTALLATION CHECK

AX = 3DFFh

Return: AX = 4A44h if resident SeeAlso: AX=357Fh,AX=4203h

3E - DOS 2+ - "CLOSE" - CLOSE FILE

	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

3Fh - DOS 2+ - "READ" - READ FROM FILE OR DEVICE

	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

3Fh - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK

	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

3Fh - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA

	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 ???

40h - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE

	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

40h - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER

	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

40h - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA

	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”

4000 - FARTBELL.EXE - INSTALLATION CHECK

	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

4001 - FARTBELL.EXE - FORCE NOISE

	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

4101 - SoftLogic Data Guardian - ???

	AX = 4101h
	DX = FFFEh
Return: AX = 0000h if installed

Note: resident code sets several internal variables on this call

42h - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION

	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

4203h - VIRUS - "Shake" - INSTALLATION CHECK

	AX = 4203h
Return: AX = 1234h if resident

SeeAlso: AX=3DFFh,AX=4243h

4243h - VIRUS - "Invader" - INSTALLATION CHECK

	AX = 4243h
Return: AX = 5678h if resident

SeeAlso: AX=4203h,AX=4B04h

43h

4300h - DOS 2+ - GET FILE ATTRIBUTES

	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

4301h - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES

	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

4302h - DR-DOS 3.41+ internal - GET ACCESS RIGHTS

	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

4304h - DR-DOS 5.0 internal - GET ???

	AX = 4304h
	???
Return: CF clear if successful
	    CX = AX = ???
	CF set on error
	    AX = error code (see AH=59h)

SeeAlso: AX=4305h

4305h - DR-DOS 5.0 internal - SET ???

	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

44h

4401h - DOS 2+ - IOCTL - SET DEVICE INFORMATION

	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

4402h - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL

AX = 4402h
BX = file handle referencing character device
CX = number of bytes to read
DS:DX -> buffer

Return: CF clear if successful

    AX = number of bytes actually read
CF set on error
    AX = error code (01h,05h,06h,0Dh) (see 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

4402h - Network Driver Interface Spec 2.0.1 - PROTOCOL MANAGER

AX = 4402h
BX = file handle for device "PROTMAN$"
DS:DX -> request block (see below)
CX = 000Eh (size of request block)
Format of request block for GetProtocolManagerInfo:
Offset Size Description
00hWORD01h
02hWORDreturned status (see below)
04hDWORDreturned pointer to structure representing parsed user config
08hDWORDunused
0ChWORDreturned BCD version of NDIS on which Protocol Manager is based
Format of request block for RegisterModule:
Offset Size Description
00hWORD02h
02hWORDreturned status (see below)
04hDWORDpointer to module's common characteristics table (see below)
08hDWORDpointer to list of modules to which the module is to be bound
0ChWORDunused
Format of request block for BindAndStart:
Offset Size Description
00hWORD03h
02hWORDreturned status (see below)
04hDWORDcaller's virtual address in FailingModules structure
08hDWORDunused
0ChWORDunused
Format of request block for GetProtocolManagerLinkage:
Offset Size Description
00hWORD04h
02hWORDreturned status (see below)
04hDWORDreturned dispatch point
08hDWORDunused
0ChWORDreturned 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
Format of request block for GetProtocolIniPath:
Offset Size Description
00hWORD05h
02hWORDreturned status (see below)
04hDWORDpointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
08hDWORDunused
0ChWORDbuffer length
Format of request block for RegisterProtocolManagerInfo:
Offset Size Description
00hWORD06h
02hWORDreturned status (see below)
04hDWORDpointer to structure containing parsed user config file
08hDWORDunused
0ChWORDlength of structure
Format of request block for InitAndRegister:
Offset Size Description
00hWORD07h
02hWORDreturned status (see below)
04hDWORDunused
08hDWORDpoitner to ASCIZ name of the module to be prebind initialized
0ChWORDunused
Format of request block for UnbindAndStop:
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
Format of request block for BindStatus:
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
Format of request block for RegisterStatus:
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
Values of status code:
0000h success
0001h wait for release–protocol has retained control of the data buffer
0002h request queued
0003h frame not recognized
0004h frame rejected
0005h frame should be forwarded
0006h out of resource
0007h invalid parameter
0008h invalid function
0009h not supported
000Ah hardware error
000Bh transmit error
000Ch unrecognized destination
000Dh buffer too small
0020h already started
0021h binding incomplete
0022h driver not initialized
0023h hardware not found
0024h hardware failure
0025h configuration failure
0026h interrupt conflict
0027h MAC incompatible
0028h initialization failed
0029h no binding
002Ah network may be disconnected
002Bh incompatible OS version
002Ch already registered
002Dh path not found
002Eh insufficient memory
002Fh info not found
00FFh general failure
F000h-FFFFh reserved for vendor-specific codes, treated as general failure
Format of common characteristics table:
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

Format of MAC Service-Specific Characteristics Table:
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
Format of NetBIOS Service-Specific Characteristics Table:
Offset Size Description
00hWORD length of table in bytes
02h 16 BYTEs ASCIZ type name of NetBIOS module
12hWORD NetBIOS module code
14h N BYTEs vendor-specific info
Format of MAC Service-Specific Status Table:
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

4402h - U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???

AX = 4402h
BX = handle for character device "GDMS"
CX = number of bytes to read (>= 4)
DS:DX -> buffer (see 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 ???

4402h - U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE

AX = 4402h
BX = handle for device "LA$TBYTE"
CX = 0004h
DS:DX -> DWORD to hold address of 39-byte table of ???

Return: CF set on error

    AX = error code (see 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”

4402h - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS

AX = 4402h
BX = handle for device "KSP$UMM"
CX = 0004h
DS:DX -> DWORD to hold entry point

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

4402h - SMARTDRV.SYS - IOCTL - GET CACHE STATUS

AX = 4402h
BX = file handle for device "SMARTAAR"
CX = number of bytes to read (min 28h)
DS:DX -> buffer for status record (see 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

4402h - CD-ROM device driver - IOCTL INPUT

AX = 4402h
BX = file handle referencing character device for CD-ROM driver
CX = number of bytes to read
DS:DX -> control block (see 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”

4402h - U - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT

AX = 4402h
BX = file handle for device "QEMM386$"
CX = 0004h
DS:DX -> DWORD buffer for API entry point

Return: CF clear if successful

    buffer filled (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

4402h - U - Quarterdeck - QEMM-386 v6+ - GET ???

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

4402h - U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE

AX = 4402h
BX = file handle for device "HOOKROM$"
CX = 0004h
DS:DX -> DWORD buffer for address of hooked vector table (see 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

4402h - Advanced SCSI Programming Interface (ASPI) - INTERFACE

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

4402h - U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE

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

4402h - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO

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

4402h - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER

AX = 4402h
BX = file handle referencing device "$IPCUST"
CX, DS:DX ignored

Return: CF clear if successful

    AX destroyed
CF set on error
    AX = error code (01h,05h,06h,0Dh) (see 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

45h - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE

	AH = 45h
	BX = file handle
Return: CF clear if successful
	    AX = new handle
	CF set on error
	    AX = error code (04h,06h) (see 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

46h - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE

	AH = 46h
	BX = file handle
	CX = file handle to become duplicate of first handle
Return: CF clear if successful
	CF set on error
	    AX = error code (04h,06h) (see 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

47h - DOS 2+ - "CWD" - GET CURRENT DIRECTORY

	AH = 47h
	DL = drive number (00h = default, 01h = A:, etc)
	DS:SI -> 64-byte buffer for ASCIZ pathname
Return: CF clear if successful
	    AX = 0100h (undocumented)
	CF set on error
	    AX = error code (0Fh) (see 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

48h - DOS 2+ - ALLOCATE MEMORY

	AH = 48h
	BX = number of paragraphs to allocate
Return: CF clear if successful
	    AX = segment of allocated block
	CF set on error
	    AX = error code (07h,08h) (see 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

49h - DOS 2+ - FREE MEMORY

	AH = 49h
	ES = segment of block to free
Return: CF clear if successful
	CF set on error
	    AX = error code (07h,09h) (see 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

4Ah - DOS 2+ - RESIZE MEMORY BLOCK

	AH = 4Ah
	BX = new size in paragraphs
	ES = segment of block to resize
Return: CF clear if successful
	CF set on error
	    AX = error code (07h,08h,09h) (see 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

4Bh

4Bh - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM

	AH = 4Bh
	AL = type of load
	    00h load and execute
	    01h load but do not execute
	    03h load overlay
	    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

Structures format

Format of EXEC parameter block for AL=00h,01h,04h:
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
Format of EXEC parameter block for AL=03h:
Offset Size Description
00h WORD segment at which to load overlay
02h WORD relocation factor to apply to overlay if in .EXE format
Format of .EXE file header:
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
Format of new executable header:
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
Format of new executable segment table record:
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

Format of new executable entry table item (list):
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
Format of new executable relocation data (immediately follows segment image):
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
Format of resource record:
Offset Size Description
00h WORD type ID
0000h if end of resource records
>= 8000h if integer type
else offset from start of resource table to type string
02h WORD number of resources of this type
04h DWORD reserved for runtime use
08h N Resources (see below)

resource type and name strings are stored immediately following the resource table, and are not null-terminated

Format of new executable resource entry:
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

Format of new executable module reference table [one bundle of entries]:
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

Format of new executable resident/nonresident name table entry:
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

Format of Linear Executable (enhanced mode executable) header:
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

Format of object table entry:
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)
Format of object page map table entry:
Offset Size Description
00h 4 BYTEs ???
Format of resident names table entry:
Offset Size Description
00h BYTE length of name
01h N BYTEs name
N+1 3 BYTEs ???
Format of linear executable entry table:
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 ???
Format of Borland debugging information header (following load image):
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

4Bh - ELRES v1.0 only - INSTALLATION CHECK

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

4B04h - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK

	AX = 4B04h
Return: CF clear if "MG" resident
	AX = 044Bh if "699"/"Thirteen Minutes" resident

SeeAlso: AX=4243h,AX=4B25h

4B43h - DOS 5.0 - SET EXECUTION STATE

	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

4B25h - VIRUS - "1063"/"Mono" - INSTALLATION CHECK

AX = 4B25h

Return: DI = 1234h if resident SeeAlso: AX=4B04h,AX=4B40h

4B40h - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK

AX = 4B40h

Return: AX = 5678h if resident SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah

4B41h - VIRUS - "Plastique"/"AntiCad" - ???

AX = 4B41h
???

Return: ??? SeeAlso: AX=4B40h

4B4Ah - VIRUS - "Jabberwocky" - INSTALLATION CHECK

AX = 4B4Ah

Return: AL = 57h if resident SeeAlso: AX=4B40h,AX=4B4Bh

4B4Bh - VIRUS - "Horse-2" - INSTALLATION CHECK

AX = 4B4Bh

Return: CF clear if resident SeeAlso: AX=4B4Ah,AX=4B4Dh

4B4Dh - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK

AX = 4B4Dh

Return: CF clear if resident SeeAlso: AX=4B4Ah,AX=4B50h

4B50h - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK

AX = 4B50h

Return: AX = 1234h if resident SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h

4B4Dh - VIRUS - "Horse" - INSTALLATION CHECK

AX = 4B53h

Return: CF clear if resident SeeAlso: AX=4B50h,AX=4B55h

4B55h - VIRUS - "Sparse" - INSTALLATION CHECK

AX = 4B55h

Return: AX = 1231h if resident SeeAlso: AX=4B53h,AX=4B59h

4B59h - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK

AX = 4B59h

Return: CF clear if resident SeeAlso: AX=4B50h,AX=4B5Eh

4B5Eh - VIRUS - "Brothers" - INSTALLATION CHECK

AX = 4B5Eh

Return: CF clear if resident SeeAlso: AX=4B59h,AX=4B87h

4B60h - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???

AX = 4B60h
???

Return: ??? SeeAlso: AX=4B50h

4B87h - VIRUS - "Shirley" - INSTALLATION CHECK

AX = 4B87h

Return: AX = 6663h if resident SeeAlso: AX=4B5Eh,AX=4B95h

4B95h - VIRUS - "Zherkov-1882" - INSTALLATION CHECK

AX = 4B95h

Return: AX = 1973h if resident SeeAlso: AX=4B87h,AX=4BA7h

4BA7h - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK

AX = 4BA7h

Return: AX = B459h if resident SeeAlso: AX=4B95h,AX=4BAAh

4BAAh - VIRUS - "Nomenklatura" - INSTALLATION CHECK

AX = 4BAAh

Return: CF clear if resident SeeAlso: AX=4BA7h,AX=4BAFh

4BAFh - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK

AX = 4BAFh

Return: AL = AFh if “Magnitogorsk” resident

AL = FAh if "948"/"Screenplus1" resident

SeeAlso: AX=4BAAh,AX=4BDDh

4BDDh - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK

AX = 4BDDh

Return: AX = 1234h SeeAlso: AX=4BAFh,AX=4BFEh

4BEEh - F-DRIVER.SYS v1.14+ - GRAB INT 21

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

4BF0h - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK

AX = 4BF0h

Return: CF clear if installed

    AX = 899Dh

Note: DIET is an executable-compression program SeeAlso: AX=4BF1h

4BF1h - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???

AX = 4BF1h

Return: ??? SeeAlso: AX=4BF0h

4BFEh - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK

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”

4BFFh - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK

	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

4BFFh - VIRUS - "Cascade" - INSTALLATION CHECK

	AX = 4BFFh
	SI = 0000h
	DI = 0000h
Return: DI = 55AAh if installed

SeeAlso: AX=4BFFh“Justice”,AX=5252h

4Ch - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE

	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

4Dh - DOS 2+ - GET RETURN CODE

	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

4Eh - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE

	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

59h - DOS 3+ - GET EXTENDED ERROR INFORMATION

	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

5Ah - DOS 3+ - CREATE TEMPORARY FILE

	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

5Bh- DOS 3+ - CREATE NEW FILE

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”