home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-09-13 | 336.1 KB | 9,084 lines |
- Interrupt List, part 3 of 8
- This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown
- ----------20---------------------------------
- INT 20 - Minix - SEND/RECEIVE MESSAGE
- AX = process ID of other process
- BX -> message
- CX = 1 send
- 2 receive
- 3 send&receive
- Note: the message contains the system call number (numbered as in V7
- Unix(tm)) and the call parameters
- ----------20---------------------------------
- INT 20 - DOS 1+ - TERMINATE PROGRAM
- CS = PSP segment
- Return: never
- Note: (see INT 21/AH=00h)
- SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
- ----------2100-------------------------------
- INT 21 - DOS 1+ - TERMINATE PROGRAM
- AH = 00h
- CS = PSP segment
- Notes: 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
- ----------2101-------------------------------
- INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
- AH = 01h
- Return: AL = character read
- Notes: ^C/^Break are checked, and INT 23 executed if read
- 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
- ----------2102-------------------------------
- INT 21 - 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
- ----------2103-------------------------------
- INT 21 - 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
- ----------2104-------------------------------
- INT 21 - 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
- ----------2105-------------------------------
- INT 21 - 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
- ----------2106-------------------------------
- INT 21 - 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
- ----------2106--DLFF-------------------------
- INT 21 - 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
- ----------2107-------------------------------
- INT 21 - 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
- ----------2108-------------------------------
- INT 21 - 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
- ----------2109-------------------------------
- INT 21 - 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+
- under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
- SeeAlso: AH=02h,AH=06h"OUTPUT"
- ----------210A-------------------------------
- INT 21 - 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
- ----------210A00-----------------------------
- INT 21 - 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"
- ----------210B-------------------------------
- INT 21 - 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
- ----------210B56-----------------------------
- INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
- AX = 0B56h
- Return: AX = 4952h if resident
- SeeAlso: AX=0D20h
- ----------210C-------------------------------
- INT 21 - 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
- ----------210D-------------------------------
- INT 21 - 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
- ----------210D20-----------------------------
- INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
- AX = 0D20h
- Return: AX = 1971h if resident
- SeeAlso: AX=0B56h,AH=30h/DX=ABCDh
- ----------210E-------------------------------
- INT 21 - 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
- ----------210F-------------------------------
- INT 21 - 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
- Notes: (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)
- Note: 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 current absolute cluster number on disk
- 1Ch WORD current relative cluster number within file
- (0 = first cluster of file, 1 = second cluster, etc.)
- 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 on disk
- 1Bh WORD current absolute cluster number on disk
- 1Dh WORD current relative cluster number within file
- 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 on disk
- 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 on disk
- 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
- Note: 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.
- ----------2110-------------------------------
- INT 21 - 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
- ----------2111-------------------------------
- INT 21 - 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
- Notes: 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
- SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
- ----------2112-------------------------------
- INT 21 - 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
- Note: (see AH=11h)
- assumes that successful FindFirst executed on search FCB before call
- SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
- ----------2113-------------------------------
- INT 21 - 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
- Notes: 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
- ----------2114-------------------------------
- INT 21 - 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
- Notes: 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
- ----------2115-------------------------------
- INT 21 - 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
- ----------2116-------------------------------
- INT 21 - 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
- ----------2117-------------------------------
- INT 21 - 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
- Return: AL = status
- 00h successfully renamed
- FFh no matching files,file is read-only, or new name already exists
- Note: subdirectories may be renamed using an extended FCB with the
- appropriate attribute
- SeeAlso: AH=0Fh,AH=13h,AH=56h,INT 2F/AX=1111h
- ----------2118-------------------------------
- INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
- AH = 18h
- Return: AL = 00h
- Note: 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
- ----------2119-------------------------------
- INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
- AH = 19h
- Return: AL = drive (00h = A:, 01h = B:, etc)
- SeeAlo: AH=0Eh,AH=47h
- ----------211A-------------------------------
- INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
- AH = 1Ah
- DS:DX -> Disk Transfer Area (DTA)
- Notes: the DTA is set to PSP:0080h when a program is started
- under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
- SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
- ----------211B-------------------------------
- INT 21 - 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)
- Note: under DOS 1.x, DS:BX points at an actual copy of the FAT; later
- versions return a pointer to a copy of the FAT's ID byte
- SeeAlso: AH=1Ch,AH=36h
-
- Values for media ID byte:
- FFh floppy, double-sided, 8 sectors per track (320K)
- FEh floppy, single-sided, 8 sectors per track (160K)
- FDh floppy, double-sided, 9 sectors per track (360K)
- FCh floppy, single-sided, 9 sectors per track (180K)
- F9h floppy, double-sided, 15 sectors per track (1.2M)
- F8h hard disk
- F0h other
- ----------211C-------------------------------
- INT 21 - 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)
- Note: 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
- ----------211D-------------------------------
- INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
- AH = 1Dh
- Return: AL = 00h
- Note: 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
- ----------211E-------------------------------
- INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
- AH = 1Eh
- Return: AL = 00h
- Note: corresponds to the CP/M BDOS function "set file attributes" which was
- meaningless under MSDOS 1.x
- SeeAlso: AH=18h,AH=1Dh,AH=20h
- ----------211F-------------------------------
- INT 21 - 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
- Note: this call was undocumented prior to the release of DOS 5.0; however,
- only the DOS 4+ version of the DPB has been documented
- SeeAlso: AH=32h
-
- Format of DOS 1.1 and MSDOS 1.25 drive parameter block:
- Offset Size Description
- 00h BYTE sequential device ID
- 01h BYTE logical drive number (0=A:)
- 02h WORD bytes per sector
- 04h BYTE highest sector number within a cluster
- 05h BYTE shift count to convert clusters into sectors
- 06h WORD starting sector number of first FAT
- 08h BYTE number of copies of FAT
- 09h WORD number of directory entries
- 0Bh WORD number of first data sector
- 0Dh WORD highest cluster number (number of data clusters + 1)
- 0Fh BYTE sectors per FAT
- 10h WORD starting sector of directory
- 12h WORD address of allocation table
- Note: the DOS 1.0 table is the same except that the first and last fields
- are missing; see INT 21/AH=32h for the DOS 2+ version
- ----------2120-------------------------------
- INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
- AH = 20h
- Return: AL = 00h
- Note: corresponds to the CP/M BDOS function "get/set default user
- (sublibrary) number", which is meaningless under MSDOS
- SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
- ----------2121-------------------------------
- INT 21 - 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
- Notes: 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
- ----------2122-------------------------------
- INT 21 - 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
- Notes: 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
- ----------2123-------------------------------
- INT 21 - 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)
- Note: not supported by MS Windows 3.0 DOSX.EXE DOS extender
- SeeAlso: AH=42h
- ----------2124-------------------------------
- INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
- AH = 24h
- DS:DX -> opened FCB (see AH=0Fh)
- Notes: 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
- ----------2125-------------------------------
- INT 21 - DOS 1+ - SET INTERRUPT VECTOR
- AH = 25h
- AL = interrupt number
- DS:DX -> new interrupt handler
- Notes: this function is preferred over direct modification of the interrupt
- vector table
- some DOS extenders place an API on this function, as it is not
- directly meaningful in protected mode
- SeeAlso: AX=2501h,AH=35h
- ----------212501-----------------------------
- INT 21 P - Phar Lap 386/DOS-Extender - RESET DOS EXTENDER DATA STRUCTURES
- AX = 2501h
- SS = application's original SS or DS (FlashTek X-32VM)
- Return: CF clear if successful
- CF set on error
- caller is operating on X-32 stack (FlashTek X-32VM)
- Notes: 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
- a compatible DOS extender, or when using a product that was created
- using 386-DOS/Extender or a compatible
- this function is also supported by FlashTek X-32VM
- SeeAlso: AH=30h"Phar Lap"
- ----------212502-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
- AX = 2502h
- CL = interrupt number
- Return: CF clear
- ES:EBX = CS:EIP of protected-mode interrupt handler
- Note: this function is also supported by FlashTek X-32VM
- SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
- ----------212503-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
- AX = 2503h
- CL = interrupt number
- Return: CF clear
- EBX = CS:IP of real-mode interrupt handler
- Note: this function is also supported by FlashTek X-32VM
- SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
- ----------212504-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
- AX = 2504h
- CL = interrupt number
- DS:EDX = CS:EIP of protected-mode interrupt handler
- Return: CF clear
- Note: this function is also supported by FlashTek X-32VM
- SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
- ----------212505-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
- AX = 2505h
- CL = interrupt number
- EBX = CS:IP of real-mode interrupt handler
- Return: CF clear
- Note: this function is also supported by FlashTek X-32VM
- SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
- ----------212506-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CONTRL IN PROT MODE
- AX = 2506h
- CL = interrupt number
- DS:EDX = CS:EIP of protected-mode interrupt handler
- Return: CF clear
- Notes: 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
- this function is also supported by FlashTek X-32VM
- ----------212507-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
- AX = 2507h
- CL = interrupt numbern
- DS:EDX = CS:EIP of protected-mode interrupt handler
- EBX = CS:IP of real-mode interrupt handler
- Return: CF clear
- Notes: interrupts are disabled until both vectors have been modified
- this function is also supported by FlashTek X-32VM
- SeeAlso: AX=2504h,AX=2505h
- ----------212508-----------------------------
- INT 21 - 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
- Note: this function is also supported by FlashTek X-32VM
- SeeAlso: AX=2509h
- ----------212509-----------------------------
- INT 21 - 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
- SeeAlso: AX=2508h
- ----------212509-----------------------------
- INT 21 - FlashTek X-32VM - GET SYSTEM SEGMENTS AND SELECTORS
- AX = 2509h
- Return: CF clear
- EAX high word = default DS
- AX = alias for 16-bit data segment
- BX = real mode code segment
- EDX high word = selector covering full 4GB address space
- DX = default SS
- ESI high word = PSP selector
- SI = environment selector
- ----------21250A-----------------------------
- INT 21 - 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
- ----------21250C-----------------------------
- INT 21 - 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 (Phar Lap only)
- Note: this function is also supported by FlashTek X-32VM
- SeeAlso: INT 31/AX=0400h,INT 67/AX=DE0Ah
- ----------21250D-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
- AX = 250Dh
- Return: CF clear
- EAX = CS:IP of real-mode callback procedure 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
- Notes: this function is also supported by FlashTek X-32VM
- X-32VM guarantees the intermode buffer to be at least 4 KB
- SeeAlso: AX=250Eh
-
- Call real-mode callback with:
- STACK: DWORD offset to protected-mode code
- WORD placeholder for protected-mode CS
- DWORD pointer to selector structure (see below)
- or 0000h:0000h for defaults
- var parameters for protected-mode procedure
- Return: via FAR return
-
- Format of selector structure:
- Offset Size Description
- 00h WORD protected-mode GS selector
- 02h WORD protected-mode FS selector
- 04h WORD protected-mode ES selector
- 06h WORD protected-mode DS selector
- ----------21250E-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
- AX = 250Eh
- EBX = CS:IP 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
- stack unchanged
- CF set on error
- EAX = error code
- 01h not enough real-mode stack space
- Note: this function is also supported by FlashTek X-32VM; under X-32VM, the
- call will fail if ECX > 0000003Fh
- SeeAlso: AX=250Dh,AX=2510h,AH=E1h"OS/286",INT 31/AX=0301h
- ----------21250F-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
- AX = 250Fh
- ES:EBX = 48-bit protected-mode address to convert
- Return: CF clear if successful (address < 1MB)
- ECX = 32-bit real-mode MS-DOS address
- CF set on error (address >= 1MB)
- ECX = linear address
- Note: this function is also supported by FlashTek X-32VM
- SeeAlso: AX=2510h
- ----------212510-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
- AX = 2510h
- EBX = CS:IP 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
- Note: unlike most of the preceding 25xxh functions, this one is not
- supported by FlashTek X-32VM
- SeeAlso: AX=250Eh,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
- ----------212511-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
- AX = 2511h
- DS:EDX -> 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
- Note: this function is also supported by FlashTek X-32VM
- SeeAlso: AX=2503h,AX=2505h,AX=250Eh,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
- ----------212512-----------------------------
- INT 21 - 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
- ----------212513-----------------------------
- INT 21 - 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
- ----------212514-----------------------------
- INT 21 - 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
- ----------212515-----------------------------
- INT 21 - 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
- ----------212516-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - FREE ALL MEMORY OWNED BY LDT
- AX = 2516h
- ???
- Return: ???
- ----------212517-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - GET INFO ON DOS DATA BUFFER
- AX = 2517h
- ???
- Return: ???
- ----------212518-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - SPECIFY HANDLER FOR MOVED SEGMENTS
- AX = 2518h
- ???
- Return: ???
- ----------212519-----------------------------
- INT 21 - 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
- ----------21251A-----------------------------
- INT 21 - 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
- ----------21251B-----------------------------
- INT 21 - 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
- ----------21251D-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender VMM - READ PAGE-TABLE ENTRY
- AX = 251Dh
- ???
- Return: ???
- SeeAlso: AX=251Eh,AX=EB00h,INT 31/AX=0506h
- ----------21251E-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender VMM - WRITE PAGE-TABLE ENTRY
- AX = 251Eh
- ???
- Return: ???
- SeeAlso: AX=251Dh,INT 31/AX=0507h
- ----------21251F-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
- AX = 251Fh
- ???
- Return: ???
- SeeAlso: AX=251Dh,AX=251Eh
- ----------212520-----------------------------
- INT 21 - 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)
- ----------212521-----------------------------
- INT 21 - 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
- ----------212522-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY ALTERNATE PAGE-FAULT HANDLER
- AX = 2522h
- ???
- Return: ???
- SeeAlso: AX=2523h
- ----------212523-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender VMM - SPECIFY OUT-OF-SWAP-SPACE HANDLER
- AX = 2523h
- ???
- Return: ???
- SeeAlso: AX=2522h
- ----------212524-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender VMM - INSTALL PAGE-REPLACEMENT HANDLERS
- AX = 2524h
- ???
- Return: ???
- ----------212525-----------------------------
- INT 21 - 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
- ----------212526-----------------------------
- INT 21 - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
- AX = 2526h
- ???
- Return: ???
- ----------21252B-----------------------------
- INT 21 - FlashTek X-32VM - VIRTUAL MEMORY MANAGEMENT - PAGE LOCKING
- AX = 252Bh
- BH = function
- 05h lock pages
- 06h unlock pages
- BL = address type
- 00h linear address
- ECX = linear start address of memory region
- 01h segmented address
- ES:ECX -> start of memory region
- EDX = size of memory region in bytes
- Return: CF clear if successful
- CF set on error
- Note: if X-32 is not using virtual memory, this function always succeeds
- ----------212532-----------------------------
- INT 21 - FlashTek X-32VM - GET EXCEPTION HANDLER VECTOR
- AX = 2532h
- CL = exception number (00h-0Fh)
- Return: CF clear if successful
- ES:EBX = CS:EIP of current exception handler
- CF set on error (CL > 0Fh)
- SeeAlso: AX=2533h
- ----------212533-----------------------------
- INT 21 - FlashTek X-32VM - SET EXCEPTION HANDLER VECTOR
- AX = 2533h
- CL = exception number (00h-0Fh)
- DS:EDX = CS:EIP of new exception handler
- Return: CF clear if successful
- CF set on error (CL > 0Fh)
- SeeAlso: AX=2532h
- ----------2125C0-----------------------------
- INT 21 - 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
- ----------2125C1-----------------------------
- INT 21 - 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
- ----------2125C2-----------------------------
- INT 21 - 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
- ----------2125C3-----------------------------
- INT 21 - 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
- ----------2126-------------------------------
- INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
- AH = 26h
- DX = segment at which to create PSP (see below)
- Notes: 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
- 00h 2 BYTEs INT 20 instruction for CP/M CALL 0 program termination
- the CDh 20h here is often used as a signature for a valid PSP
- 02h WORD segment of first byte beyond memory allocated to program
- 04h BYTE unused filler
- 05h BYTE CP/M CALL 5 service request (FAR JMP to 000C0h)
- BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
- 06h WORD CP/M compatibility--size of first segment for .COM files
- 08h 2 BYTEs remainder of FAR JMP at 05h
- 0Ah DWORD stored INT 22 termination address
- 0Eh DWORD stored INT 23 control-Break handler address
- 12h DWORD DOS 1.1+ stored INT 24 critical error handler address
- 16h WORD segment of parent PSP
- 18h 20 BYTEs DOS 2+ Job File Table, one byte per file handle, FFh = closed
- 2Ch WORD DOS 2+ segment of environment for process
- 2Eh DWORD DOS 2+ process's SS:SP on entry to last INT 21 call
- 32h WORD DOS 3+ number of entries in JFT (default 20)
- 34h DWORD DOS 3+ pointer to JFT (default PSP:0018h)
- 38h DWORD DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
- used by SHARE in DOS 3.3
- 3Ch 4 BYTEs unused by DOS versions <= 5.00
- reportedly used by Novell NetWare shell 3.x
- 40h 2 BYTEs DOS 5.0 version to return on INT 21/AH=30h
- 42h 6 BYTEs unused by DOS versions <= 5.00
- 48h BYTE (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
- 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
- Notes: 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;
- Novell NetWare reportedly also uses values of 80h-FEh
- 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
- some DOS extenders place protected-mode values in various PSP fields
- such as the "parent" field, which can confuse PSP walkers. Always
- check either for the CDh 20h signature or that the suspected PSP is
- at the beginning of a memory block which owns itself (the preceding
- paragraph should be a valid MCB with "owner" the same as the
- suspected PSP).
-
- 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
- ----------2127-------------------------------
- INT 21 - 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)
- Notes: 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
- ----------2128-------------------------------
- INT 21 - 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
- Notes: 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
- ----------2129-------------------------------
- INT 21 - 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)
- Notes: 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
- ----------212A-------------------------------
- INT 21 - 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
- ----------212B-------------------------------
- INT 21 - 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
- Note: DOS 3.3+ also sets CMOS clock
- SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
- ----------212B--CX4149-----------------------
- INT 21 - AI Architects - ??? - INSTALLATION CHECK
- AH = 2Bh
- CX = 4149h ('AI')
- DX = 413Fh ('A?')
- Return: AL <> FFh if installed
- Note: Borland's TKERNEL makes this call
- ----------212B--CX4358-----------------------
- INT 21 - 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
- ----------212B--CX4445-----------------------
- INT 21 - 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
- Notes: in DESQview v1.x, there were no subfunctions; this call only identified
- whether or not DESQview was loaded. DESQview v2.52 performs function
- 01h for all subfunction requests 0Ch and higher and appears to ignore
- all lower-numbered functions not listed here.
- DESQview versions 2.5x are part of DESQview/X v1.0x.
- BUG: subfunction 05h does not appear to work correctly in DESQview 2.52
- SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
- ----------212B--CX454C-----------------------
- INT 21 - 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)
- Note: 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
- 00h WORD number of return codes which can be stored by following buffer
- 02h WORD current position in buffer (treated as a ring)
- 04h N BYTEs ELRES buffer
- ----------212B01CX5441-----------------------
- INT 21 - 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)
- Note: 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
- 1: INT 14h
- 2: INT 15h
- 3: INT 16h
- 4: INT 17h
- 5: INT 21h
- 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???
- 1: DoubleDOS???
- 2: TopView???
- 3: KeySwitch
- 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
- 1: INT 14h
- 2: INT 15h
- 3: INT 16h
- 4: INT 17h
- 5: INT 21h
- 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
- 1: DoubleDOS
- 2: TopView
- 3: OmniView
- 4: KeySwitch
- 5: HLT instruction
- 61h BYTE watch_DOS
- 62h BYTE bit flags
- bit 0: TAME enabled
- 1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick)
- 2: /TIMEPOLL
- 3: /KEYPOLL
- 4: inhibit timer
- 5: enable status monitoring
- 63h BYTE old status
- 64h WORD signature DA34h
-
- Format of TAME 2.60 data area:
- Offset Size Description
- 00h BYTE data structure minor version number (02h in TAME 2.60)
- 01h BYTE data structure major version number (0Bh in TAME 2.60)
- 02h DWORD number of task switches
- 06h DWORD number of keyboard polls
- 0Ah DWORD number of time polls
- 0Eh DWORD number of times DESQview told program runs only in foreground
- 12h DWORD time of last /CLEAR or TAME-RES load
- 16h DWORD time yielded
- 1Ah DWORD time spent polling
- 1Eh DWORD time spent waiting on key input with INT 16/AH=01h,11h
- 22h 4 BYTEs ???
- 26h DWORD original INT 10h
- 2Ah DWORD original INT 14h
- 2Eh DWORD original INT 15h
- 32h DWORD original INT 16h
- 36h DWORD original INT 17h
- 3Ah DWORD original INT 21h
- 3Eh DWORD original INT 28h
- 42h WORD offset of TAME INT 10h handler
- 44h WORD offset of TAME INT 14h handler
- 46h WORD offset of TAME INT 15h handler
- 48h WORD offset of TAME INT 16h handler
- 4Ah WORD offset of TAME INT 17h handler
- 4Ch WORD offset of TAME INT 21h handler
- 4Eh WORD offset of TAME INT 28h handler
- 50h WORD X in /max:X,Y or /freq:X,Y
- 52h WORD Y in /max:X,Y or /freq:X,Y
- 54h WORD number of polls remaining before next task switch
- 56h WORD /KEYIDLE value
- 58h 4 BYTEs ???
- 5Ch WORD X in /boost:X,Y
- 5Eh WORD Y in /boost:X,Y
- 60h WORD /FG: value
- 62h WORD task switches left until next FGONLY DESQview API call
- 64h WORD multitasker version ???
- 66h WORD virtual screen segment
- 68h BYTE flags for interrupts already grabbed by TAME
- bit 0: INT 10h
- 1: INT 14h
- 2: INT 15h
- 3: INT 16h
- 4: INT 17h
- 5: INT 21h
- 6: INT 28h
- 69h BYTE flags for interrupts which may be acted on (same bits as above)
- 6Ah BYTE window or task number for this task
- 6Bh BYTE multitasker type
- 01h DESQview
- 02h DoubleDOS
- 03h TopView
- 04h OmniView
- 05h VM/386
- 6Ch BYTE type of task switching selected (bit flags)
- bit 0: DESQview
- 1: DoubleDOS
- 2: TopView
- 3: OmniView
- 4: KeySwitch
- 5: HLT instruction
- 6Dh BYTE watch_DOS
- 6Eh BYTE bit flags
- bit 0: TAME enabled
- 1: /FREQ instead of /MAX (counts in 50h and 52h per tick)
- 2: /TIMEPOLL
- 3: /KEYPOLL
- 4: inhibit timer
- 5: enable status monitoring
- 6Fh BYTE old status
- 70h WORD signature DA34h
- ----------212B44BX4D41-----------------------
- INT 21 - 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
- 00h BYTE operating mode
- 00h wait for a call
- 01h hot key activates
- 02h incoming call activates
- 03h initiate a call
- 01h 3 BYTEs user ID to append to config file names
- 04h WORD DS-relative pointer to path for config files
- 06h WORD DS-relative pointer to path for program files
-
- Format of termination request structure:
- Offset Size Description
- 00h BYTE operating mode after termination
- 00h wait for a call
- 01h hot key activates
- 02h incoming call activates
- 80h use current mode
- FFh remove from memory
-
- 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
- ----------212C-------------------------------
- INT 21 - DOS 1+ - GET SYSTEM TIME
- AH = 2Ch
- Return: CH = hour
- CL = minute
- DH = second
- DL = 1/100 seconds
- Note: 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
- ----------212D-------------------------------
- INT 21 - 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
- Note: 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"
- ----------212E--DL00-------------------------
- INT 21 - 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
- Notes: 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
- ----------212F-------------------------------
- INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
- AH = 2Fh
- Return: ES:BX -> current DTA
- Note: under the FlashTek X-32 DOS extender, the pointer is in ES:EBX
- SeeAlso: AH=1Ah
- ----------2130-------------------------------
- INT 21 - 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
- Notes: the OS/2 v1.x Compatibility Box returns major version 0Ah (10)
- the OS/2 v2.x Compatibility Box returns major version 14h (20)
- the Windows/NT DOS box returns major version 1Eh (30)
- DOS 4.01 and 4.02 identify themselves as version 4.00; use
- INT 21/AH=87h to distinguish between the original European MSDOS 4.00
- and the later PCDOS 4.0x and MSDOS 4.0x
- 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=3000h/BX=3000h,AX=3306h,AX=4452h,AH=87h,INT 15/AX=4900h
- SeeAlso: INT 2F/AX=122Fh,INT 2F/AX=E002h
- ----------2130-------------------------------
- INT 21 - 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,INT 2F/AX=F100h
- ----------2130--DXABCD-----------------------
- INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
- AH = 30h
- DX = ABCDh
- Return: DX = DCBAh if installed
- SeeAlso: AX=0D20h,AX=30F1h
- ----------213000-----------------------------
- INT 21 - 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
- ----------213000BX1234-----------------------
- INT 21 - 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
- Notes: 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
- ----------213000BX3000-----------------------
- INT 21 - PC-MOS/386 v3.0 - INSTALLATION CHECK/GET VERSION
- AX = 3000h
- BX = 3000h
- CX = DX = 3000h
- Return: AX = PC-MOS version
- Program: PC-MOS/386 is a multitasking/multiuser MSDOS-compatible operating
- system by Software Links, Inc.
- SeeAlso: AH=30h,INT 38/AH=02h,INT 38/AH=10h
- ----------2130F1-----------------------------
- INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
- AX = 30F1h
- Return: AL = 00h if resident
- SeeAlso: AH=30h/DX=ABCDh,AX=330Fh
- ----------2131-------------------------------
- INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
- AH = 31h
- AL = return code
- DX = number of paragraphs to keep resident
- Return: never
- Notes: 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
- ----------2132-------------------------------
- INT 21 - 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
- Notes: 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.
- undocumented prior to the release of DOS 5.0; only the DOS 4+ version
- of the DPB has been documented, however
- 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)
- 16-bit FAT if greater than 0FF6h, else 12-bit FAT
- 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,
- usually the last cluster allocated
- 1Fh WORD number of free clusters on drive, FFFFh = unknown
- ----------2133-------------------------------
- INT 21 - 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
- Note: 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
- ----------213302-----------------------------
- INT 21 - 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
- Note: this function does not use any of the DOS-internal stacks and may thus
- be called at any time; one possible use is modifying Control-Break
- checking from within an interrupt handler or TSR
- SeeAlso: AH=33h
- ----------213305-----------------------------
- INT 21 - DOS 4+ - GET BOOT DRIVE
- AX = 3305h
- Return: DL = boot drive (1=A:,...)
- Notes: 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
- ----------213306-----------------------------
- INT 21 - 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
- BUG: DR-DOS 5.0 and 6.0 return 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,INT 2F/AX=112Fh
- ----------213306-----------------------------
- INT 21 - CBIS POWERLAN - NETWORK REDIRECTOR - ???
- AX = 3306h
- Return: AX = 3306h
- BL = ??? (usually 00h)
- BH = ??? (usually 00h or FFh)
- Note: unknown function, is in conflict with DOS 5.0 version call
- SeeAlso: AX=3306h"DOS"
- ----------21330F-----------------------------
- INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
- AX = 330Fh
- Return: AL = 0Fh if resident (DOS returns AL=FFh)
- SeeAlso: AX=30F1h,AX=33E0h
- ----------2133E0-----------------------------
- INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
- AX = 33E0h
- Return: AL = E0h if resident (DOS returns AL=FFh)
- SeeAlso: AX=330Fh,AX=357Fh
- ----------2134-------------------------------
- INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
- AH = 34h
- Return: ES:BX -> one-byte InDOS flag
- Notes: 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)
- this function was undocumented prior to the release of DOS 5.0.
- SeeAlso: AX=5D06h,AX=5D0Bh,INT 28
- ----------2135-------------------------------
- INT 21 - DOS 2+ - GET INTERRUPT VECTOR
- AH = 35h
- AL = interrupt number
- Return: ES:BX -> current interrupt handler
- SeeAlso: AH=25h,AX=2503h
- ----------213501-----------------------------
- INT 21 P - FlashTek X-32VM - ALLOCATE PROTECTED-MODE SELECTOR
- AX = 3501h
- Return: CF clear if successful
- BX = new selector
- CF set on error (no more selectors available)
- Note: the new selector will be an expand-up read/write data selector with
- undefined base and limit
- SeeAlso: AX=3502h,INT 31/AX=0000h
- ----------213502-----------------------------
- INT 21 P - FlashTek X-32VM - DEALLOCATE PROTECTED-MODE SELECTOR
- AX = 3502h
- BX = selector
- Return: CF clear if successful
- CF set on error (invalid selector)
- Note: only selectors allocated via AX=3501h should be deallocated
- SeeAlso: AX=3501h,INT 31/AX=0001h
- ----------213503-----------------------------
- INT 21 P - FlashTek X-32VM - SET SELECTOR BASE ADDRESS
- AX = 3503h
- BX = selector
- ECX = base address
- Return: CF clear if successful
- CF set on error (invalid selector)
- Note: there are probably additional 35xxh functions, but the message
- containing the FlashTek calls was truncated in transit and the
- remaining information did not arrive prior to release
- SeeAlso: INT 31/AX=0007h
- ----------21357F-----------------------------
- INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
- AX = 357Fh
- Return: DX = FFFFh if installed
- SeeAlso: AX=33E0h,AX=3DFFh
- ----------2136-------------------------------
- INT 21 - 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
- Notes: 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
- ----------213700-----------------------------
- INT 21 - 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
- ----------213701-----------------------------
- INT 21 - 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
- ----------2137-------------------------------
- INT 21 - 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
- ----------2138-------------------------------
- INT 21 - 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)
- ----------2138-------------------------------
- INT 21 - 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
- ----------2139-------------------------------
- INT 21 - 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
- under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
- SeeAlso: AH=3Ah,AH=3Bh,AH=E2h/SF=0Ah,INT 2F/AX=1103h
- ----------213A-------------------------------
- INT 21 - 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)
- Notes: directory must be empty (contain only '.' and '..' entries)
- under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
- SeeAlso: AH=39h,AH=3Bh,AH=E2h/SF=0Bh,INT 2F/AX=1101h
- ----------213B-------------------------------
- INT 21 - 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
- under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
- SeeAlso: AH=47h,INT 2F/AX=1105h
- ----------213C-------------------------------
- INT 21 - 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)
- Notes: if a file with the given name exists, it is truncated to zero length
- under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
- SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h
- ----------213D-------------------------------
- INT 21 - 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)
- Notes: 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
- under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
- SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1226h
-
- File sharing behavior:
- | Second and subsequent Opens
- First |Compat Deny Deny Deny Deny
- Open | All Write Read 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 R |C C C N N N N N N N N N N N N
- All 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 R |2 C C N N N Y N N N N N Y N N
- Write 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 R |C C C N N N N Y N N N N N Y N
- Read 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 R |2 C C N N N Y Y Y N N N Y Y Y
- None 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
- ----------213DFF-----------------------------
- INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
- AX = 3DFFh
- Return: AX = 4A44h if resident
- SeeAlso: AX=357Fh,AX=4203h
- ----------213E-------------------------------
- INT 21 - 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)
- Note: 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
- ----------213F-------------------------------
- INT 21 - 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)
- Notes: 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
- under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
- SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
- ----------213F-------------------------------
- INT 21 - 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
- bit 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
- bit 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
- bit 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
- bit 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
- ----------213F-------------------------------
- INT 21 - 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)
- Notes: 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 ???
- ----------2140-------------------------------
- INT 21 - 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)
- Notes: if CX is zero, no data is written, and the file is truncated or
- extended to the current position
- data is written beginning at the 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
- BUG: a write of zero bytes will appear to succeed when it actually failed
- if the write is extending the file and there is not enough disk
- space for the expanded file (DOS 5.0); one should therefore check
- whether the file was in fact extended by seeking to 0 bytes from
- the end of the file (INT 21/AX=4202h/CX=0/DX=0)
- under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
- SeeAlso: AH=28h,AH=3Fh,AH=93h,INT 2F/AX=1109h
- ----------2140-------------------------------
- INT 21 - 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)
- Note: 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 base address of hardware debugger board
- ----------2140-------------------------------
- INT 21 - 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)
- Notes: 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"
- ----------214000BX0002-----------------------
- INT 21 - FARTBELL.EXE - INSTALLATION CHECK
- AX = 4000h
- BX = 0002h
- CX = 0000h
- DS:DX = 0000h:0000h
- Return: CF clear if installed
- AX = CS of resident code
- Note: FARTBELL is a joke program by Guenther Thiele which makes various
- noises when programs output a bell
- SeeAlso: AX=4001h
- ----------214001BX0002-----------------------
- INT 21 - FARTBELL.EXE - FORCE NOISE
- AX = 4001h
- BX = 0002h
- CX = 0000h
- DS:DX = 0000h:0000h
- Note: FARTBELL is a joke program by Guenther Thiele which makes various
- noises when programs output a bell
- SeeAlso: AX=4000h
- ----------2141-------------------------------
- INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
- 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)
- Notes: (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.
- under DRDOS and DR Multiuser DOS, this function will fail if the file
- is currently open
- under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
- SeeAlso: AH=13h,AX=4301h,AX=5D00h,AH=60h,AX=F244h,INT 2F/AX=1113h
- ----------214101DXFFFE-----------------------
- INT 21 - SoftLogic Data Guardian - ???
- AX = 4101h
- DX = FFFEh
- Return: AX = 0000h if installed
- Note: resident code sets several internal variables on this call
- ----------2142-------------------------------
- INT 21 - 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)
- Notes: 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
- ----------214203-----------------------------
- INT 21 - VIRUS - "Shake" - INSTALLATION CHECK
- AX = 4203h
- Return: AX = 1234h if resident
- SeeAlso: AX=3DFFh,AX=4243h
- ----------214243-----------------------------
- INT 21 - VIRUS - "Invader" - INSTALLATION CHECK
- AX = 4243h
- Return: AX = 5678h if resident
- SeeAlso: AX=4203h,AX=4B04h
- ----------214300-----------------------------
- INT 21 - 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)
- Note: under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
- SeeAlso: AX=4301h,AX=4310h,AH=B6h,INT 2F/AX=110Fh
- ----------214301-----------------------------
- INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES
- AX = 4301h
- CX = new attributes
- bit 7: shareable (Novell NetWare)
- 6: unused
- 5: archive
- 4: directory
- 3: volume label
- execute-only (Novell NetWare)
- 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)
- Notes: 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
- for security reasons, the Novell NetWare execute-only bit can never
- be cleared; the file must be deleted and recreated
- under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
- SeeAlso: AX=4300h,AX=4311h,INT 2F/AX=110Eh
- ----------214302-----------------------------
- INT 21 - DR-DOS 3.41+ internal - GET ACCESS RIGHTS
- AX = 4302h
- DS:DX -> ASCIZ pathname
- Return: CF clear if successful
- CX = access rights
- bit 0 owner delete requires password
- bit 1 owner execution requires password (FlexOS)
- bit 2 owner write requires password
- bit 3 owner read requires password
- bit 4 group delete requires password
- bit 5 group execution requires password (FlexOS)
- bit 6 group write requires password
- bit 7 group read requires password
- bit 8 world delete requires password
- bit 9 world execution requires password (FlexOS)
- bit 10 world write requires password
- bit 11 world read requires password
- AX = CX (DR-DOS 5.0)
- CF set on error
- AX = error code
- Desc: Determine which operations the calling program may perform on a
- specified file without being required to provide a password.
- Notes: this protection scheme has been coordinated on all current Digital
- Research/Novell operating systems (DR-DOS 3.41+, DRMDOS 5.x, and
- FlexOS 2+)
- only FlexOS actually uses the "execution" bits; DR-DOS 3.41+ treats
- them as "read" bits.
- DR-DOS 3.41-5.x only use bits 0-3. Only DR-DOS 6.0 using a
- DRMDOS 5.x security system allowing for users and groups uses bits
- 4-11.
- SeeAlso: AX=4303h
- ----------214303-----------------------------
- INT 21 - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
- AX = 4303h
- CX = access rights
- bits 11-0: access rights (see AX=4302h)
- 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
- Note: if the file is already protected, the old password must be added after
- the pathname, separated by a ";"
- SeeAlso: AX=4302h,AX=4454h
- ----------214304-----------------------------
- INT 21 - 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
- ----------214305-----------------------------
- INT 21 - DR-DOS 5.0 internal - SET ???
- AX = 4305h
- ???
- Return: CF clear if successful
- CF set on error
- AX = error code (see AH=59h)
- SeeAlso: AX=4304h
- ----------214310-----------------------------
- INT 21 - Banyan VINES 2.1+ - GET EXTENDED FILE ATTRIBUTES
- AX = 4310h
- DS:DX -> ASCIZ filename
- Return: CF clear if successful
- CH = attributes (see AX=4311h)
- CF set on error
- AX = error code (01h,02h,03h,05h) (see AH=59h)
- Note: the filename may be a directory but must be on a VINES file service
- SeeAlso: AX=4300h,AX=4311h,AH=B6h,INT 2F/AX=110Fh
- ----------214310-----------------------------
- INT 21 - Banyan VINES 2.1+ - SET EXTENDED FILE ATTRIBUTES
- AX = 43100h
- CH = new attributes
- bit 7: unused
- bit 6: shareable
- bit 5: execute-only
- bits 4-0: unused
- DS:DX -> ASCIZ filename
- Return: CF clear if successful
- CF set on error
- AX = error code (01h,02h,03h,05h) (see AH=59h)
- Note: the filename may be a directory but must be on a VINES file service
- SeeAlso: AX=4301h,AX=4310h,INT 2F/AX=110Eh
- ----------214400-----------------------------
- INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
- 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)
- Note: 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
- ----------214401-----------------------------
- INT 21 - 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
- ----------214402-----------------------------
- INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL
- AX = 4402h
- BX = file handle referencing character device
- CX = number of bytes to read
- DS:DX -> buffer
- Return: CF clear if successful
- AX = number of bytes actually read
- CF set on error
- AX = error code (01h,05h,06h,0Dh) (see 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
- ----------214402-----------------------------
- INT 21 - 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
- 00h WORD 01h
- 02h WORD returned status (see below)
- 04h DWORD returned pointer to structure representing parsed user config
- 08h DWORD unused
- 0Ch WORD returned BCD version of NDIS on which Protocol Manager is based
-
- Format of request block for RegisterModule:
- Offset Size Description
- 00h WORD 02h
- 02h WORD returned status (see below)
- 04h DWORD pointer to module's common characteristics table (see below)
- 08h DWORD pointer to list of modules to which the module is to be bound
- 0Ch WORD unused
-
- Format of request block for BindAndStart:
- Offset Size Description
- 00h WORD 03h
- 02h WORD returned status (see below)
- 04h DWORD caller's virtual address in FailingModules structure
- 08h DWORD unused
- 0Ch WORD unused
-
- Format of request block for GetProtocolManagerLinkage:
- Offset Size Description
- 00h WORD 04h
- 02h WORD returned status (see below)
- 04h DWORD returned dispatch point
- 08h DWORD unused
- 0Ch WORD returned protocol manager DS
- Note: the dispatch point may be called as follows instead of using this IOCTL
- STACK: WORD protocol manager DS
- DWORD pointer to request block
- Return: AX = returned status
- STACK popped
-
- Format of request block for GetProtocolIniPath:
- Offset Size Description
- 00h WORD 05h
- 02h WORD returned status (see below)
- 04h DWORD pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
- 08h DWORD unused
- 0Ch WORD buffer length
-
- Format of request block for RegisterProtocolManagerInfo:
- Offset Size Description
- 00h WORD 06h
- 02h WORD returned status (see below)
- 04h DWORD pointer to structure containing parsed user config file
- 08h DWORD unused
- 0Ch WORD length of structure
-
- Format of request block for InitAndRegister:
- Offset Size Description
- 00h WORD 07h
- 02h WORD returned status (see below)
- 04h DWORD unused
- 08h DWORD poitner to ASCIZ name of the module to be prebind initialized
- 0Ch WORD unused
-
- 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 unused
-
- 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
- Note: 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
- 1: supports multicast
- 2: supports functional/group addressing
- 3: supports promiscuous mode
- 4: station address software settable
- 5: statistics always current
- 6: supports InitiateDiagnostics
- 7: supports loopback
- 8: MAC does primarily ReceiveChain indications instead of
- ReceiveLookahead indications
- 9: supports IBM source routing
- 10: supports MAC reset
- 11: supports Open/Close adapter
- 12: supports interrupt request
- 13: supports source routing bridge
- 14: supports GDT virtual addresses (OS/2 version)
- 15: multiple TransferDatas allowed durign a single
- indication
- 16: MAC normally sets FrameSize = 0 in ReceiveLookahead
- 17-31: reserved, must be 0
- 44h WORD maximum frame size which may be both sent and received
- 46h DWORD total transmit buffer capacity in bytes
- 4Ah WORD transmit buffer allocation block size in bytes
- 4Ch DWORD total receive buffer capacity in bytes
- 50h WORD receive buffer allocation block size in bytes
- 52h 3 BYTEs IEEE vendor code
- 55h BYTE vendor adapter code
- 56h DWORD pointer to ASCIZ vendor adapter description
- 5Ah WORD IRQ used by adapter
- 5Ch WORD transmit queue depth
- 5Eh WORD maximum supported number of data blocks in buffer descriptors
- 60h N BYTEs vendor-specific info
-
- Format of NetBIOS Service-Specific Characteristics Table
- Offset Size Description
- 00h WORD length of table in bytes
- 02h 16 BYTEs ASCIZ type name of NetBIOS module
- 12h WORD NetBIOS module code
- 14h N BYTEs vendor-specific info
-
- 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
- 4: MAC open
- 5: diagnostics in progress
- 6-31: reserved
- 0Ah WORD current packet filter flags
- bit 0: directed/multicast or group/functional
- 1: broadcast
- 2: promiscuous
- 3: all source routing
- 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
- ----------214402-----------------------------
- INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
- AX = 4402h
- BX = handle for character device "GDMS"
- CX = number of bytes to read (>= 4)
- DS:DX -> buffer (see 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 ???
- ----------214402-----------------------------
- INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE
- AX = 4402h
- BX = handle for device "LA$TBYTE"
- CX = 0004h
- DS:DX -> DWORD to hold address of 39-byte table of ???
- Return: CF set on error
- AX = error code (see 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"
- ----------214402-----------------------------
- INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS
- AX = 4402h
- BX = handle for device "KSP$UMM"
- CX = 0004h
- DS:DX -> DWORD to hold entry point
- 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
- ----------214402-----------------------------
- INT 21 - 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
- ----------214402-----------------------------
- INT 21 - CD-ROM device driver - IOCTL INPUT
- AX = 4402h
- BX = file handle referencing character device for CD-ROM driver
- CX = number of bytes to read
- DS:DX -> control block (see 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"
- ----------214402-----------------------------
- INT 21 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
- ----------214402-----------------------------
- INT 21 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
- ----------214402-----------------------------
- INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
- AX = 4402h
- BX = file handle for device "HOOKROM$"
- CX = 0004h
- DS:DX -> DWORD buffer for address of hooked vector table (see 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
- ----------214402-----------------------------
- INT 21 - 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
- ----------214402-----------------------------
- INT 21 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=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
- ----------214402-----------------------------
- INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO
- AX = 4402h
- BX = file handle for device "PGS1600$"
- CX = 0018h (size of buffer)
- DS:DX -> configuration buffer (see 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
- ----------214402-----------------------------
- INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
- AX = 4402h
- BX = file handle referencing device "$IPCUST"
- CX, DS:DX ignored
- Return: CF clear if successful
- AX destroyed
- CF set on error
- AX = error code (01h,05h,06h,0Dh) (see 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)
- 00h-7Fh reserved for Microsoft
- 80h-FFh reserved for OEM/user-defined
- 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 = parameter to pass to driver (European MSDOS 4.0, OS/2 comp box)
- DI = parameter to pass to driver (European MSDOS 4.0, OS/2 comp box)
- Return: CF set on error
- AX = error code (see AH=59h)
- CF clear if successful
- DS:DX -> iteration count if CL=65h
- SI = returned value (European MSDOS 4.0, OS/2 comp box)
- DI = returned value (European MSDOS 4.0, OS/2 comp box)
- DS:DX -> (OS/2 comp box) data block
- Note: bit assignments for function code in CL:
- bit 7: set to ignore if unsupported, clear to return error
- bit 6: set if passed to driver, clear if intercepted by DOS
- bit 5: set if queries data from device, clear if sends command
- bits 4-0: subfunction
- 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
- 00h-7Fh reserved for Microsoft
- 80h-FFh reserved for OEM/user-defined
- CL = function
- 40h set device parameters
- 41h write logical device track
- 42h format and verify logical device track
- 46h (DOS 4+) set volume serial number (see also AH=69h)
- 47h (DOS 4+) set access flag
- 60h get device parameters
- 61h read logical device track
- 62h verify logical device track
- 66h (DOS 4+) get volume serial number (see also AH=69h)
- 67h (DOS 4+) get access flag
- 68h (DOS 5+) sense media type
- DS:DX -> (DOS) parameter block (see below)
- SI:DI -> (OS/2 comp box) parameter block (see below)
- Return: CF set on error
- AX = error code (01h,02h) (see AH=59h)
- CF clear if successful
- DS:DX -> data block if CL=60h or CL=61h
- Notes: DOS 4.01 seems to ignore the high byte of the number of directory
- entries in the BPB for diskettes.
- functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5.0
- SeeAlso: 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 ("changeline") supported
- bits 2-15 reserved
- 04h WORD number of cylinders
- 06h BYTE media type
- for 1.2M drive
- 00h 1.2M disk (default)
- 01h 320K/360K disk
- always 00h for other drive types
- 07h 31 BYTEs device BPB (see AH=53h), bytes after BPB offset 1Eh omitted
- 26h WORD number of sectors per track (start of track layout field)
- not used by function 60h
- 28h N word pairs: number,size of each sector in track
-
- Format of parameter block for functions 41h, 61h:
- Offset Size Description
- 00h BYTE special functions (reserved, must be zero)
- 01h WORD number of disk head
- 03h WORD number of disk cylinder
- 05h WORD number of first sector to read/write
- 07h WORD number of sectors
- 09h DWORD transfer address
-
- Format of parameter block for functions 42h, 62h:
- Offset Size Description
- 00h BYTE reserved, must be zero (DOS <3.2)
- bit 0=0: format/verify track
- 1: format status call (DOS 3.2+)
- bits 1-7 reserved, must be zero
- on return (DOS 4.x):
- bit 0: set if specified tracks, sectors/track supported
- bit 1: set if function not supported by BIOS
- bit 2: set if specified tracks, sectors/track not supported
- bit 3: set if no disk in drive
- 01h WORD number of disk head
- 03h WORD number of disk cylinder
-
- Format of parameter block for functions 46h, 66h:
- Offset Size Description
- 00h WORD info level (00h)
- 02h DWORD disk serial number (binary)
- 06h 11 BYTEs volume label or "NO NAME "
- 11h 8 BYTEs filesystem type "FAT12 " or "FAT16 " (CL=66h only)
-
- Format of parameter block for functions 47h, 67h:
- Offset Size Description
- 00h BYTE special-function field (must be zero)
- 01h BYTE disk-access flag, nonzero if access allowed by driver
-
- Format of parameter block for function 68h:
- Offset Size Description
- 00h BYTE 01h for default media type, 00h for any other media type
- 01h BYTE 02h for 720K, 07h for 1.44M, 09h for 2.88M
- ----------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+ - 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 - HISTORY BUFFER, SHARE, AND HILOAD CONTROL
- 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 = single-tasking/multitasking nature
- 10h single-tasking
- AL = operating system version ID (see AX=4452h)
- 14h multitasking
- AL = operating system version ID
- 32h Concurrent PC DOS 3.2
- 41h Concurrent DOS 4.1
- 50h Concurrent DOS/XM 5.0 or Concurrent DOS/386 1.1
- 60h Concurrent DOS/XM 6.0 or Concurrent DOS/386 2.0
- 62h Concurrent DOS/XM 6.2 or Concurrent DOS/386 3.0
- 66h DR Multiuser DOS 5.1
- Notes: as of Concurrent DOS/XM 5.0 (possibly earlier), the version is stored
- in the environment variable VER
- use this function if you are looking for multitasking capabilities,
- AX=4452h for single-tasking
- this function should never return the single-tasking values
- 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
- AH = single-tasking/multitasking
- 10h single-tasking
- AL = operating system version ID
- 60h DOS Plus
- 63h DR-DOS 3.41
- 64h DR-DOS 3.42
- 65h DR-DOS 5.00
- 67h DR-DOS 6.00
- 14h multitasking
- AL = operating system version ID (see AX=4451h)
- Notes: the DR-DOS version is stored in the environment variable VER
- use this function if looking for single-tasking capabilities, AX=4451h
- if looking for multitasking; this call should never return multi-
- tasking values
- 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+ - HISTORY BUFFER CONTROL
- AX = 4456h
- DL = flag
- bit 0: 1 = command history buffers
- 0 = set to application
- Return: AL = ??? (20h if DL bit 0 set, A0h if clear (DR-DOS 6.0))
- Note: This was seen called by COMMAND.COM of DR-DOS 6.0
- ----------214457-----------------------------
- INT 21 U - DR-DOS 5.0+ - SHARE/HILOAD CONTROL
- AX = 4457h
- DH = subfunction
- 00h enable/disable SHARE
- DL = 00h disable
- = 01h enable
- else Return: AX = ???
- 01h get HILOAD status
- Return: AX = status
- 0000h off
- 0001h on
- 02h set HILOAD status
- DL = new state (00h off, 01h on)
- Return: AX = ???
- other
- Return: AX = ???
- Note: This was seen called by COMMAND.COM of DR-DOS 6.0
- SeeAlso: AX=4457h/DX=FFFFh
- ----------214457DXFFFF-----------------------
- INT 21 U - DR-DOS 6.0 - GET SHARE STATUS
- AX = 4457h
- DX = FFFFh
- Return: AX = SHARE status
- SeeAlso: INT 2F/AX=1000h
- ----------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
- ----------2145-------------------------------
- INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE
- AH = 45h
- BX = file handle
- Return: CF clear if successful
- AX = new handle
- CF set on error
- AX = error code (04h,06h) (see AH=59h)
- Notes: moving file pointer for either handle will also move it for the other,
- because both will refer to the same system file table
- for DOS versions prior to 3.3, file writes may be forced to disk by
- duplicating the file handle and closing the duplicate
- SeeAlso: AH=3Dh,AH=46h
- ----------2146-------------------------------
- INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE
- AH = 46h
- BX = file handle
- CX = file handle to become duplicate of first handle
- Return: CF clear if successful
- CF set on error
- AX = error code (04h,06h) (see AH=59h)
- Notes: closes file with handle CX if it is still open
- DOS 3.30 hangs if BX=CX on entry
- moving file pointer for either handle will also move it for the other,
- because both will refer to the same system file table
- SeeAlso: AH=3Dh,AH=45h
- ----------2147-------------------------------
- INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
- AH = 47h
- DL = drive number (00h = default, 01h = A:, etc)
- DS:SI -> 64-byte buffer for ASCIZ pathname
- Return: CF clear if successful
- AX = 0100h (undocumented)
- CF set on error
- AX = error code (0Fh) (see AH=59h)
- Notes: the returned path does not include a drive or the initial backslash
- many Microsoft products for Windows rely on AX being 0100h on success
- under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
- SeeAlso: AH=19h,AH=3Bh,INT 15/AX=DE25h
- ----------2148-------------------------------
- INT 21 - DOS 2+ - ALLOCATE MEMORY
- AH = 48h
- BX = number of paragraphs to allocate
- Return: CF clear if successful
- AX = segment of allocated block
- CF set on error
- AX = error code (07h,08h) (see AH=59h)
- BX = size of largest available block
- Notes: 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
- under the FlashTek X-32 DOS extender, EBX contains a protected-mode
- near pointer to the allocated block on a successful return
- SeeAlso: AH=49h,AH=4Ah,AH=58h,AH=83h
- ----------2149-------------------------------
- INT 21 - DOS 2+ - FREE MEMORY
- AH = 49h
- ES = segment of block to free
- Return: CF clear if successful
- CF set on error
- AX = error code (07h,09h) (see AH=59h)
- Notes: 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
- ----------214A-------------------------------
- INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
- AH = 4Ah
- BX = new size in paragraphs
- ES = segment of block to resize
- Return: CF clear if successful
- CF set on error
- AX = error code (07h,08h,09h) (see AH=59h)
- BX = maximum paragraphs available for specified memory block
- Notes: under DOS 2.1-5.0, if there is insufficient memory to expand the block
- as much as requested, the block will be made as large as possible
- DOS 2.1-5.0 coalesces any free blocks immediately following the block
- to be resized
- SeeAlso: AH=48h,AH=49h,AH=83h
- ----------214B-------------------------------
- INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
- AH = 4Bh
- AL = type of load
- 00h load and execute
- 01h load but do not execute
- 03h load overlay
- 04h load and execute in background (European MSDOS 4.0 only)
- "Exec & Go" (see also AH=80h)
- DS:DX -> ASCIZ program name (must include extension)
- ES:BX -> parameter block (see below)
- CX = mode (subfunction 04h only)
- 0000h child placed in zombie mode after termination
- 0001h child's return code discarded on termination
- Return: CF clear if successful
- BX,DX destroyed
- if subfunction 01h, process ID set to new program's PSP; get with
- INT 21/AH=62h
- CF set on error
- AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see AH=59h)
- Notes: 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 AX value to be passed to the child program is put
- on top of the child's stack
- for function 03h, DOS assumes that the overlay is being loaded into
- memory allocated by the caller
- function 01h was undocumented prior to the release of DOS 5.0
- some versions (such as DR-DOS 6.0) check the parameters and parameter
- block and return an error if an invalid value (such as an offset of
- FFFFh) is found
- background programs under European MSDOS 4.0 must use the new
- executable format
- new executables begin running with the following register values
- AX = environment segment
- BX = offset of command tail in environment segment
- CX = size of automatic data segment (0000h = 64K)
- ES,BP = 0000h
- DS = automatic data segment
- SS:SP = initial stack
- the command tail corresponds to an old executable's PSP:0081h and
- following, except that the 0Dh is turned into a NUL (00h); new
- format executables have no PSP
- under the FlashTek X-32 DOS extender, only function 00h is supported
- and the pointers are passed in DS:EDX and ES:EBX
- BUGS: DOS 2.00 assumes that DS points at the current program's PSP
- Load Overlay (subfunction 03h) loads up to 512 bytes too many if the
- file contains additional data after the actual overlay
- SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h"OS/2",AH=8Ah,INT 2E
-
- 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 EXEC parameter block for FlashTek X-32:
- Offset Size Description
- 00h PWORD 48-bit far pointer to environment string
- 06h PWORD 48-bit far pointer to command tail string
-
- 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
- Notes: if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
- versions of the MS linker set it that way
- if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
- program is loaded as high in memory as possible
- the maximum allocation is set to FFFFh by default
-
- 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: 80x87 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 MSDOS 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:
- 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)
- Note: 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
-
- Format of new executable resource data:
- 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)
- Note: 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
- Notes: resource type and name strings are stored immediately following the
- resource table, and are not null-terminated
- strings are counted strings, with a string of length 0 indicating the
- end of the resource table
-
- 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
- Note: 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)
- Notes: the first string in the resident name table is the module name; the
- first entry in the nonresident name table is the module description
- the strings are case-sensitive; if the executable was linked with
- /IGNORECASE, all strings are in uppercase
-
- 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 > (only for
- 3 = uses PM windowing API / programs)
- bit 13: module not loadable (only for programs)
- bit 15: module is DLL rather than program
- 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)
- Note: 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
- Note: additional information on the Borland debugging info may be found in
- Borland's Open Architecture Handbook
- ----------214B-------------------------------
- INT 21 - 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
- ----------214B04-----------------------------
- INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK
- AX = 4B04h
- Return: CF clear if "MG" resident
- AX = 044Bh if "699"/"Thirteen Minutes" resident
- SeeAlso: AX=4243h,AX=4B25h
- ----------214B05-----------------------------
- INT 21 - 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)
- Note: used by programs which intercept AX=4B00h to prepare new programs for
- execution (including setting the DOS version number). No DOS, BIOS
- or other software interrupt may be called after return from this call
- before commencement of the child process. If DOS is running in the
- HMA, A20 is turned off on return from this call.
- SeeAlso: AH=4Bh
-
- Format of execution state structure:
- Offset Size Description
- 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
- ----------214B25-----------------------------
- INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK
- AX = 4B25h
- Return: DI = 1234h if resident
- SeeAlso: AX=4B04h,AX=4B40h
- ----------214B40-----------------------------
- INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK
- AX = 4B40h
- Return: AX = 5678h if resident
- SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
- ----------214B41-----------------------------
- INT 21 - VIRUS - "Plastique"/"AntiCad" - ???
- AX = 4B41h
- ???
- Return: ???
- SeeAlso: AX=4B40h
- ----------214B4A-----------------------------
- INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK
- AX = 4B4Ah
- Return: AL = 57h if resident
- SeeAlso: AX=4B40h,AX=4B4Bh
- ----------214B4B-----------------------------
- INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK
- AX = 4B4Bh
- Return: CF clear if resident
- SeeAlso: AX=4B4Ah,AX=4B4Dh
- ----------214B4D-----------------------------
- INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK
- AX = 4B4Dh
- Return: CF clear if resident
- SeeAlso: AX=4B4Ah,AX=4B50h
- ----------214B50-----------------------------
- INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK
- AX = 4B50h
- Return: AX = 1234h if resident
- SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
- ----------214B53-----------------------------
- INT 21 - VIRUS - "Horse" - INSTALLATION CHECK
- AX = 4B53h
- Return: CF clear if resident
- SeeAlso: AX=4B50h,AX=4B55h
- ----------214B55-----------------------------
- INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK
- AX = 4B55h
- Return: AX = 1231h if resident
- SeeAlso: AX=4B53h,AX=4B59h
- ----------214B59-----------------------------
- INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK
- AX = 4B59h
- Return: CF clear if resident
- SeeAlso: AX=4B50h,AX=4B5Eh
- ----------214B5E-----------------------------
- INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
- AX = 4B5Eh
- Return: CF clear if resident
- SeeAlso: AX=4B59h,AX=4B87h
- ----------214B60-----------------------------
- INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???
- AX = 4B60h
- ???
- Return: ???
- SeeAlso: AX=4B50h
- ----------214B87-----------------------------
- INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK
- AX = 4B87h
- Return: AX = 6663h if resident
- SeeAlso: AX=4B5Eh,AX=4B95h
- ----------214B95-----------------------------
- INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK
- AX = 4B95h
- Return: AX = 1973h if resident
- SeeAlso: AX=4B87h,AX=4BA7h
- ----------214BA7-----------------------------
- INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK
- AX = 4BA7h
- Return: AX = B459h if resident
- SeeAlso: AX=4B95h,AX=4BAAh
- ----------214BAA-----------------------------
- INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK
- AX = 4BAAh
- Return: CF clear if resident
- SeeAlso: AX=4BA7h,AX=4BAFh
- ----------214BAF-----------------------------
- INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK
- AX = 4BAFh
- Return: AL = AFh if "Magnitogorsk" resident
- AL = FAh if "948"/"Screenplus1" resident
- SeeAlso: AX=4BAAh,AX=4BDDh
- ----------214BDD-----------------------------
- INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK
- AX = 4BDDh
- Return: AX = 1234h
- SeeAlso: AX=4BAFh,AX=4BFEh
- ----------214BEE-----------------------------
- INT 21 - 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
- ----------214BF0-----------------------------
- INT 21 - 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
- ----------214BF1-----------------------------
- INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???
- AX = 4BF1h
- Return: ???
- SeeAlso: AX=4BF0h
- ----------214BFE-----------------------------
- INT 21 - 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"
- ----------214BFF-----------------------------
- INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK
- AX = 4BFFh
- Return: BL = FFh if "USSR-707" resident
- DI = 55AAh if "Justice" resident
- CF clear if "Europe 92" resident
- SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h
- ----------214BFFSI0000-----------------------
- INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK
- AX = 4BFFh
- SI = 0000h
- DI = 0000h
- Return: DI = 55AAh if installed
- SeeAlso: AX=4BFFh"Justice",AX=5252h
- ----------214C-------------------------------
- INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
- AH = 4Ch
- AL = return code
- Return: never returns
- Notes: unless the process is its own parent (see 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
- ----------214D-------------------------------
- INT 21 - 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
- Notes: the word in which DOS stores the return code is cleared after being
- read by this function, so the return code can only be retrieved once
- this call should not be used if the child was started with AX=4B04h;
- use AH=8Ah instead
- SeeAlso: AH=4Bh,AH=4Ch,AH=8Ah
- ----------214E-------------------------------
- INT 21 - 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)
- Notes: for search attributes other than 08h, all files with at MOST the
- specified combination of hidden, system, and directory attributes
- will be returned. Under DOS 2.x, searching for attribute 08h
- (volume label) will also return normal files, while under DOS 3+
- 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 printer
- resources may be obtained by searching for "\\SERVER\@*.*"
- under the FlashTek X-32 DOS extender, the filespec pointer is in DS:EDX
- 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 (bits 0-6), remote if bit 7 set
- 01h 11 BYTEs search template
- 0Ch BYTE search attributes
- ---DOS 2.x (and some DOS 3.x???)---
- 00h BYTE search attributes
- 01h BYTE drive letter
- 02h 11 BYTEs search template
- ---WILDUNIX.COM---
- 00h 12 BYTEs 15-character wildcard search pattern and drive letter (packed)
- 0Ch BYTE search attributes
- ---DOS 2.x and most 3.x---
- 0Dh WORD entry count within directory
- 0Fh DWORD pointer to DTA???
- 13h WORD cluster number of start of parent directory
- ---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
- some Microsoft applications use segments of 0000h and FFFFh; although
- one should only call this function with valid PSP addresses, any
- program hooking it should be prepared to handle invalid addresses
- supported by OS/2 compatibility box
- this call was undocumented prior to the release of DOS 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+) sharing retry count (see AX=440Bh)
- -10 WORD (DOS 3.1+) sharing retry delay (see AX=440Bh)
- -8 DWORD (DOS 3+) pointer to current disk buffer
- -4 WORD (DOS 3+) 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)
- ---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)
- ---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)
- 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)
- 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 (General Software's Embedded DOS) 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 pointer to STACKS data segment
- 0Ch WORD offset in STACKS data segment of stack control block array
- 0Eh WORD offset in STACKS data segment of last element of that array
- 10h WORD offset in STACKS data segment of the entry in that array for
- the next stack to be allocated (initially same as value in 0Eh
- and works its way down in steps of 8 to the value in 0Ch as
- hardware interrupts pre-empt each other)
- Note: the STACKS code segment data may, if present, be located as follows:
- DOS 3.2: The code segment data is at a paragraph boundary fairly early
- in the IBMBIO segment (seen at 0070:0190h)
- DOS 3.3: The code segment is at a paragraph boundary in the DOS data
- segment, which may be determined by inspecting the segment
- pointers of the vectors for those of interrupts 02h, 08h-0Eh,
- 70h, 72-77h which have not been redirected by device drivers or
- TSRs.
- DOS 4.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 (offset FFFFh if last)
- 04h WORD number of files in this table
- 06h 28h bytes per file
- Offset Size Description
- 00h BYTE number of file handles referring to this file
- 01h BYTE file open mode (see 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 (offset FFFFh if last)
- 04h WORD number of files in this table
- 06h 38h bytes per file
- Offset Size Description
- 00h-1Eh as for DOS 3.1+ (see 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 (first three entries for
- AUX/CON/PRN contain segment of IO.SYS startup code)
- 34h WORD (SHARE.EXE) offset in SHARE code seg of share record
- 36h WORD ??? apparently always 0000h
-
- Format of DOS 3.1-3.3x system file tables and FCB tables:
- Offset Size Description
- 00h DWORD pointer to next file table (offset FFFFh if last)
- 04h WORD number of files in this table
- 06h 35h bytes per file
- Offset Size Description
- 00h WORD number of file handles referring to this file
- 02h WORD file open mode (see 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
- bits 5-0 drive number for disk files
- 07h DWORD pointer to device driver header if character device
- else pointer to DOS Drive Parameter Block (see 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) (first three
- entries for AUX/CON/PRN contain segment of IO.SYS
- startup code)
- 33h WORD offset within SHARE.EXE code segment of
- sharing record (see 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 (offset FFFFh if last)
- 04h WORD number of files in this table
- 06h 3Bh bytes per file
- Offset Size Description
- 00h WORD number of file handles referring to this file
- 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) (first three
- entries for AUX/CON/PRN contain segment of IO.SYS
- startup code)
- 33h WORD offset within SHARE.EXE code segment of
- sharing record (see 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
- 8000h network drive
- 45h BYTE physical drive number (0=A:) if this logical drive is valid
- 46h BYTE ??? apparently flags for JOIN and ASSIGN
- 47h WORD cluster number of start of parent directory (0000h = root)
- 49h WORD entry number of current directory in parent directory
- 4Bh WORD cluster number of start of current directory
- 4Dh 2 BYTEs used for media change detection (details not available)
- 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
- Note: for European MSDOS 4.0, bit 11 also indicates that bits
- 8-6 contain a version code (000 = DOS 3.0,3.1;
- 001 = DOS 3.2, 010 = European DOS 4.0)
- 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)
- ---European MSDOS 4.00---
- 15h DWORD total number of sectors if word at 08h contains zero
- (however, this DOS does not actually implement >32M partitions)
- ----------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.
- under the FlashTek X-32 DOS extender, the old-name pointer is in DS:EDX
- and the new-name pointer is in ES:EDI (DS must equal ES)
- 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 = 00h (DOS 5.0)
- 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
- Toshiba MSDOS 2.11 supports subfunctions 00h and 01h
- 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
- ----------2158-------------------------------
- INT 21 - DOS 5.0 - GET OR SET UMB LINK STATE
- AH = 58h
- AL = subfunction
- 02h get UMB link state
- Return: AL = 00h UMBs not part of DOS memory chain
- = 01h UMBs in DOS memory chain
- 03h 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)
- Note: a program which changes the UMB link state should restore it before
- terminating
- ----------2158CC-----------------------------
- INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
- AX = 58CCh
- Return: CF clear if resident
- SeeAlso: AX=5252h,AX=6969h
- ----------2159--BX0000-----------------------
- INT 21 - 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)
- ES:DI may be pointer (see error code list below)
- CL, DX, SI, BP, and DS destroyed
- Notes: 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
- ----------2159--BX0001-----------------------
- INT 21 - European MSDOS 4.0 - GET HARD ERROR INFORMATION
- AH = 59h
- BX = 0001h
- Return: ES:DI -> hard error information packet (see below) for most recent
- hard (critical) error
- SeeAlso: AH=95h,INT 24
-
- Format of hard error information packet:
- Offset Size Description
- 00h WORD contents of AX at system entry
- 02h WORD Process ID which encountered error
- 04h WORD contents of AX at time of error
- 06h BYTE error type
- 00h physical I/O error
- 01h disk change request
- 02h file sharing violation
- 03h FCB problem
- 04h file locking violation
- 05h bad FAT
- 06h network detected error
- 07h BYTE INT 24 error code
- 08h WORD extended error code (see AH=59h/BX=0000h)
- 0Ah DWORD pointer to associated device
- ----------215A-------------------------------
- INT 21 - 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
- 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)
- Notes: 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
- under the FlashTek X-32 DOS extender, the path pointer is in DS:EDX
- SeeAlso: AH=3Ch,AH=5Bh
- ----------215B-------------------------------
- INT 21 - 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
- under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
- 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,AH=BCh,AH=BEh,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,INT 2F/AX=111Dh
- ----------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 (see INT 2F/AX=0802h)
- 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 ???
- 3Ah 30 BYTEs device driver request header (see INT 2F/AX=0802h)
- 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 SFT index 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
- Note: calls INT 2F/AX=111Eh with AX on top of the stack
- SeeAlso: AX=5F01h,INT 2F/AX=111Eh
- ----------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
- Notes: when redirection is off, the local device (if any) rather than the
- remote device is used
- calls INT 2F/AX=111Eh with AX on top of the stack
- 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)
- Notes: 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
- calls INT 2F/AX=111Eh with AX on top of the stack
- 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)
- Notes: 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
- calls INT 2F/AX=111Eh with AX on top of the stack
- 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
- calls INT 2F/AX=111Eh with AX on top of the stack
- 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: ???
- Notes: appears to be similar to AX=5F02h and AX=5F05h
- calls INT 2F/AX=111Eh with AX on top of the stack
- 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: ???
- Note: supported by Novell DOS Named Pipe Extender
- SeeAlso: AX=5F33h,AX=5F34h
- ----------215F33-----------------------------
- INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPHandState
- AX = 5F33h
- ???
- Return: ???
- Note: supported by Novell DOS Named Pipe Extender
- SeeAlso: AX=5F32h,AX=5F34h
- ----------215F34-----------------------------
- INT 21 - LAN Manager Enhanced DOS API local interface - DosSetNmPHandState
- AX = 5F34h
- ???
- Return: ???
- Note: supported by Novell DOS Named Pipe Extender
- SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h
- ----------215F35-----------------------------
- INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekNmPipe
- AX = 5F35h
- ???
- Note: supported by Novell DOS Named Pipe Extender
- Return: ???
- SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h
- ----------215F36-----------------------------
- INT 21 - LAN Manager Enhanced DOS API local interface - DosTransactNmPipe
- AX = 5F36h
- ???
- Return: ???
- Note: supported by Novell DOS Named Pipe Extender
- SeeAlso: AX=5F34h,AX=5F37h
- ----------215F37-----------------------------
- INT 21 - LAN Manager Enhanced DOS API local interface - DosCallNmPipe
- AX = 5F37h
- ???
- Return: ???
- Note: supported by Novell DOS Named Pipe Extender
- SeeAlso: AX=5F36h,AX=5F38h
- ----------215F38-----------------------------
- INT 21 - LAN Manager Enhanced DOS API local interface - DosWaitNmPipe
- AX = 5F38h
- ???
- Return: ???
- Note: supported by Novell DOS Named Pipe Extender
- SeeAlso: AX=5F37h,AX=5F39h
- ----------215F39-----------------------------
- INT 21 - LAN Manager Enhanced DOS API local interface - DosRawReadNmPipe
- AX = 5F39h
- ???
- Return: ???
- Note: supported by Novell DOS Named Pipe Extender
- SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h
- ----------215F3A-----------------------------
- INT 21 - LAN Manager Enhanced DOS API local interface - DosRawWriteNmPipe
- AX = 5F3Ah
- ???
- Return: ???
- Note: supported by Novell DOS Named Pipe Extender
- 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: ???
- Note: supported by Novell DOS Named Pipe Extender
- 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=5F83h
- ----------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
- for DR DOS 6.0, this function is not automatically called when on a
- network. Device drivers reportedly cannot make this call from their
- INIT function. Using the same pointer for both input and output
- buffers is not supported in the April 1992 and earlier versions of
- DR DOS
- 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)
- 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 - Far East 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, Far East DOS 3.2+ - SET KOREAN (HANGUL) 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, Far East DOS 3.2+ - GET KOREAN (HANGUL) 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)
- Desc: adjust the size of the per-process open file table, thus raising or
- lowering the limit on the number of files the caller can open
- simultaneously
- 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,AH=86h
- ----------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+ 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
- this function is supported under Novell NetWare versions 2.0A through
- 3.11; the returned serial number is the one a DIR would display,
- the volume label is the NetWare volume label, and the file system
- is set to "FAT16".
- 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"
- ---------------------------------------------
-