Interrupt List, part 4 of 12 This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown --------O-20--------------------------------- INT 20 - Minix - SEND/RECEIVE MESSAGE AX = process ID of other process BX -> message CX = operation (1 send, 2 receive, 3 send&receive) Program: Minix is a Version 7 Unix-compatible operating system by Andrew Tanenbaum Note: the message contains the system call number (numbered as in V7 Unix(tm)) and the call parameters --------D-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 --------G-20--------------------------------- INT 20 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE FIRMWARE DEBUGGER ??? Return: ??? SeeAlso: INT 21"COMTROL" --------G-21--------------------------------- INT 21 - COMTROL HOSTESS i/ISA DEBUGGER - GET SEGMENT FOR CONTROL PROGRAM USE ??? Return: AX = first segment available for control program use SeeAlso: INT 20"COMTROL",INT 22"COMTROL" --------D-2100------------------------------- INT 21 - DOS 1+ - TERMINATE PROGRAM AH = 00h CS = PSP segment Notes: Microsoft recommends using INT 21/AH=4Ch for DOS 2+ execution continues at the 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 --------D-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 --------D-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 --------D-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 --------D-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 --------D-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 --------D-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 --------D-2106--DLFF------------------------- INT 21 - DOS 1+ - DIRECT CONSOLE INPUT AH = 06h DL = FFh Return: ZF set if no character available AL = 00h 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 this function reads from standard input, which is always the keyboard under DOS 1.x, but may be redirected under DOS 2+ although the return of AL=00h when no characters are available is not documented, some programs rely on this behavior SeeAlso: AH=0Bh --------D-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 --------D-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 --------D-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 are checked, and INT 23 is called if either 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" --------D-210A------------------------------- INT 21 - DOS 1+ - BUFFERED INPUT AH = 0Ah DS:DX -> buffer (see #0505) Return: buffer filled with user input Notes: ^C/^Break are checked, and INT 23 is called if either detected reads from standard input, which may be redirected under DOS 2+ if the maximum buffer size (see #0505) is set to 00h, this call returns immediately without reading any input SeeAlso: AH=0Ch,INT 2F/AX=4810h Format of DOS input buffer: Offset Size Description (Table 0505) 00h BYTE maximum characters buffer can hold 01h BYTE (call) 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 --------K-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 Program: WCED is a free command-line editor and history utility by Stuart Russell SeeAlso: AH=FFh"CED" --------D-210B------------------------------- INT 21 - DOS 1+ - GET STDIN STATUS AH = 0Bh Return: AL = status 00h if no character available FFh if character is available Notes: ^C/^Break are checked, and INT 23 is called if either 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 --------v-210B56----------------------------- INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK AX = 0B56h Return: AX = 4952h if resident SeeAlso: AX=0D20h,INT 12/AX=4350h/BX=4920h --------D-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 --------D-210D------------------------------- INT 21 - DOS 1+ - DISK RESET AH = 0Dh Return: (DOS 6 only) CF clear (earlier versions preserve CF) Notes: This function writes all modified disk buffers to disk, but does not update the 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 --------v-210D20----------------------------- INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK AX = 0D20h Return: AX = 1971h if resident SeeAlso: AX=0B56h,AH=30h/DX=ABCDh --------D-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 --------v-210E--DLAD------------------------- INT 21 U - Novell DOS 7 - SDRes v27.03 - INSTALLATION CHECK AH = 0Eh DL = ADh Return: AL = BAh if installed Program: SDRes is the resident portion of the Search&Destroy antiviral by Fifth Generation Systems, as bundled with Novell DOS 7 SeeAlso: AH=0Eh/DL=AEh,AH=0Eh/DL=AFh,AH=4Ah/BX=00B6h,INT 13/AX=A759h --------v-210E--DLAE------------------------- INT 21 U - Novell DOS 7 - SDRes v27.03 - CLEAR ??? FLAG AH = 0Eh DL = AEh SeeAlso: AH=0Eh/DL=ADh,AH=0Eh/DL=AFh,INT 13/AX=A759h --------v-210E--DLAF------------------------- INT 21 U - Novell DOS 7 - SDRes v27.03 - SET ??? FLAG AH = 0Eh DL = AFh SeeAlso: AH=0Eh/DL=ADh,AH=0Eh/DL=AEh,INT 13/AX=A759h --------D-210F------------------------------- INT 21 - DOS 1+ - OPEN FILE USING FCB AH = 0Fh DS:DX -> unopened File Control Block (see #0506) 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 DR-DOS checks password attached with AX=4303h BUG: APPEND for DOS 3.3+ corrupts DX if the file is not found SeeAlso: AH=10h,AH=16h,AH=3Dh,AX=4303h Format of File Control Block: Offset Size Description (Table 0506) -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 #0803 at AX=5700h) 16h WORD time of last write (see #0802 at AX=5700h) (DOS 1.1+) 18h 8 BYTEs reserved (see #0507,#0508,#0509,#0510,#0511) 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 FCB reserved field for DOS 1.0: Offset Size Description (Table 0507) 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 FCB reserved field for DOS 1.10-1.25: Offset Size Description (Table 0508) 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 FCB reserved field for DOS 2.x: Offset Size Description (Table 0509) 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 FCB reserved field for DOS 3.x: Offset Size Description (Table 0510) 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 or device bits 5-0: low six bits of device attribute word ---SHARE.EXE loaded, local file--- 1Ah WORD starting cluster of file on disk 1Ch WORD (DOS 3.x) offset within SHARE of sharing record (see #0774 at AH=52h) 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. Format of FCB reserved field for DOS 5.0: Offset Size Description (Table 0511) 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 or device bits 5-0: low six bits of device attribute word ---SHARE.EXE loaded, local file--- 1Ah WORD starting cluster of file on disk 1Ch WORD unique sequence number of sharing record 1Eh BYTE file attributes 1Fh BYTE unused??? ---SHARE.EXE loaded, remote file--- 1Ah WORD network handle 1Ch DWORD network ID ---SHARE not loaded, local device--- 1Ah DWORD pointer to device driver header 1Eh 2 BYTEs unused??? ---SHARE not loaded, local file--- 1Ah BYTE extra info bit 7: read-only attribute from SFT bit 6: archive attribute from SFT bits 5-0: high bits of sector number 1Bh WORD starting cluster of file 1Dh WORD low word of sector number containing directory entry 1Fh BYTE number of directory entry within sector --------D-2110------------------------------- INT 21 - DOS 1+ - CLOSE FILE USING FCB AH = 10h DS:DX -> File Control Block (see #0506) 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 --------D-2111------------------------------- INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB AH = 11h DS:DX -> unopened FCB (see #0506), 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 the data returned in the DTA is actually the drive number (or extended FCB header and drive number) followed by the file's directory entry (see #0512); this format happens to be compatible with an unopened 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:) this function is used by many copy protection schemes to obtain the starting cluster of a file SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh Format of DOS directory entry: Offset Size Description (Table 0512) 00h 8 BYTEs blank-padded filename 08h 3 BYTEs blank-padded file extension 0Bh BYTE attributes 0Ch 10 BYTEs reserved used by DR-DOS to store file password 16h WORD time of creation or last update (see #0802 at AX=5700h) 18h WORD date of creation or last update (see #0803 at AX=5700h) 1Ah WORD starting cluster number 1Ch DWORD file size --------D-2112------------------------------- INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB AH = 12h DS:DX -> unopened FCB (see #0506) 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 --------D-2113------------------------------- INT 21 - DOS 1+ - DELETE FILE USING FCB AH = 13h DS:DX -> unopened FCB (see #0506), 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 MS-DOS allows deletion of read-only files with an extended FCB, whereas Novell NetWare does not SeeAlso: AH=41h,INT 2F/AX=1113h --------D-2114------------------------------- INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE AH = 14h DS:DX -> opened FCB (see #0506) 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 --------D-2115------------------------------- INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE AH = 15h DS:DX -> opened FCB (see #0506) [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 --------D-2116------------------------------- INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB AH = 16h DS:DX -> unopened FCB (see #0506), 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; this is how to create a volume label in the disk's root dir not supported by MS Windows 3.0 DOSX.EXE DOS extender SeeAlso: AH=0Fh,AH=10h,AH=3Ch --------D-2117------------------------------- INT 21 - DOS 1+ - RENAME FILE USING FCB AH = 17h DS:DX -> modified FCB (see also #0506) 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 Notes: subdirectories may be renamed using an extended FCB with the appropriate attribute, as may volume labels DR-DOS checks password attached with AX=4303h before permitting rename SeeAlso: AH=0Fh,AH=13h,AX=4303h,AH=56h,INT 2F/AX=1111h --------D-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 MS-DOS SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h,INT 60/DI=0513h --------D-2119------------------------------- INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE AH = 19h Return: AL = drive (00h = A:, 01h = B:, etc) Note: Novell NetWare uses the fact that DOS 2.x COMMAND.COM issues this call from a particular location every time it starts a command to determine when to issue an automatic EOJ SeeAlso: AH=0Eh,AH=47h,AH=BBh --------D-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 --------D-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 #0513) 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 (Table 0513) 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 --------D-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), or FFh if invalid drive CX = bytes per sector DX = total number of clusters DS:BX -> media ID byte (see #0513) Notes: 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 on a DBLSPACE drive, the total number of clusters is based on the estimated compression ratio SeeAlso: AH=1Bh,AH=36h --------D-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 MS-DOS SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h --------D-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 MS-DOS 1.x SeeAlso: AH=18h,AH=1Dh,AH=20h --------D-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 #0514 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 MS-DOS 1.25 drive parameter block: Offset Size Description (Table 0514) 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 --------D-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 MS-DOS SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h --------D-2121------------------------------- INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE AH = 21h DS:DX -> opened FCB (see #0506) 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 --------D-2122------------------------------- INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE AH = 22h DS:DX -> opened FCB (see #0506) [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 --------D-2123------------------------------- INT 21 - DOS 1+ - GET FILE SIZE FOR FCB AH = 23h DS:DX -> unopened FCB (see #0506), 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) Notes: not supported by MS Windows 3.0 DOSX.EXE DOS extender MS-DOS returns nonsense if the FCB record number field is set to a very large positive number, and status FFh if negative; DR-DOS returns the correct file size in both cases BUG: APPEND for DOS 3.3+ corrupts DX if the file is not found SeeAlso: AH=42h --------D-2124------------------------------- INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB AH = 24h DS:DX -> opened FCB (see #0506) 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 --------D-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 under DR-DOS 5.0+, this function does not use any of the DOS-internal stacks and may thus be called at any time Novell NetWare (except the new DOS Requester) monitors the offset of any INT 24 set, and if equal to the value at startup, substitutes its own handler to allow handling of network errors; this introduces the potential bug that any program whose INT 24 handler offset happens to be the same as COMMAND.COM's will not have its INT 24 handler installed SeeAlso: AX=2501h,AH=35h --------E-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" --------E-212502----------------------------- INT 21 P - 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 --------E-212503----------------------------- INT 21 P - 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 --------E-212504----------------------------- INT 21 P - 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 --------E-212505----------------------------- INT 21 P - 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 --------E-212506----------------------------- INT 21 P - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CNTRL IN PR. 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 --------E-212507----------------------------- INT 21 P - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS AX = 2507h CL = interrupt number 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 --------E-212508----------------------------- INT 21 P - 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 --------E-212509----------------------------- INT 21 P - 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 --------E-212509----------------------------- INT 21 P - 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 --------E-21250A----------------------------- INT 21 P - 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 --------E-21250C----------------------------- INT 21 P - 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 --------E-21250D----------------------------- INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION AX = 250Dh Return: CF clear EAX = CS:IP of real-mode callback procedure (see #0515) 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 (Table 0515) Call Phar Lap real-mode callback with: STACK: DWORD offset to protected-mode code WORD placeholder for protected-mode CS DWORD pointer to selector structure (see #0516) or 0000h:0000h for defaults var parameters for protected-mode procedure Return: via FAR return Format of Phar Lap selector structure: Offset Size Description (Table 0516) 00h WORD protected-mode GS selector 02h WORD protected-mode FS selector 04h WORD protected-mode ES selector 06h WORD protected-mode DS selector --------E-21250E----------------------------- INT 21 P - 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 --------E-21250F----------------------------- INT 21 P - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS AX = 250Fh ES:EBX = 48-bit protected-mode address to convert ECX = 00000000h or length of data in bytes Return: CF clear if successful (address < 1MB and contiguous) ECX = 32-bit real-mode MS-DOS address CF set on error (address >= 1MB or not contiguous) ECX = linear address Note: this function is also supported by FlashTek X-32VM SeeAlso: AX=2510h --------E-212510----------------------------- INT 21 P - 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 #0517) 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 Phar Lap real-mode call parameter block: Offset Size Description (Table 0517) 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 --------E-212511----------------------------- INT 21 P - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT AX = 2511h DS:EDX -> parameter block (see #0518) 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 Phar Lap real-mode interrupt parameter block: Offset Size Description (Table 0518) 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 --------E-212512----------------------------- INT 21 P - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING AX = 2512h DS:EDX -> pointer to ASCIZ program name ES:EBX -> pointer to parameter block (see #0520) 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 (see #0519) SeeAlso: AX=2517h (Table 0519) Values for Phar Lap 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 Phar Lap program load parameter block: Offset Size Description (Table 0520) 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 --------E-212513----------------------------- INT 21 P - 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 --------E-212514----------------------------- INT 21 P - 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 --------E-212515----------------------------- INT 21 P - 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 --------E-212516----------------------------- INT 21 P - Phar Lap 386/DOS-Extender v2.2+ - FREE ALL MEMORY OWNED BY LDT AX = 2516h Return: CF clear Note: this function must be called from Ring 0 or the CS descriptor is freed --------E-212517----------------------------- INT 21 P - Phar Lap 386/DOS-Extender v2.1c+ - GET INFO ON DOS DATA BUFFER AX = 2517h Return: CF clear ES:EBX -> data buffer (protected mode address) ECX -> data buffer (real mode address) EDX = size of data buffer in bytes Note: the data buffer's address changes after calls to AX=2512h and AX=252Ah SeeAlso: AX=2512h,AX=252Ah,AX=2530h --------E-212518----------------------------- INT 21 P - Phar Lap 386/DOS-Extender 2.1c+ - SPECIFY HANDLER FOR MOVED SEGMENTS AX = 2518h ES:EBX -> function to call when a segment is moved Return: CF clear ES:EBX -> previous handler --------E-212519----------------------------- INT 21 P - 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 --------E-21251A----------------------------- INT 21 P - 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 --------E-21251B----------------------------- INT 21 P - 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 --------E-21251C----------------------------- INT 21 P - Phar Lap 386/DOS-Extender VMM v2.1c+ - FREE PHYSICAL MEMORY PAGES AX = 251Ch BH = preservation flag (00h preserve contents, 01h discard contents) EDX = number of pages to free BL = address type 00h linear address ECX = linear address of first page to be freed 01h pointer ES:ECX -> first page to be freed Return: CF clear if successful CF set on error EAX = error code 08h memory error, swap space full, no VMM or DPMI 09h invalid address --------E-21251D----------------------------- INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - READ PAGE-TABLE ENTRY AX = 251Dh BL = address type 00h linear address ECX = linear address of page table entry to read 01h pointer ES:ECX -> page table entry to read Return: CF clear if successful EAX = contents of page table entry CF set on error EAX = error code 09h invalid address or NOPAGE option set 78h invalid under DPMI Note: this function is obsolete; use AX=252Bh/BH=09h instead SeeAlso: AX=251Eh,AX=252Bh/BH=09h,AX=EB00h,INT 31/AX=0506h --------E-21251E----------------------------- INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - WRITE PAGE-TABLE ENTRY AX = 251Eh BL = address type 00h linear address ECX = linear address of page table entry to read 01h pointer ES:ECX -> page table entry to read EDX = new value for page table entry Return: CF clear if successful CF set on error EAX = error code 09h invalid address or NOPAGE option set 82h not compatible with DPMI Note: this call is obsolete; use AX=252Bh/BH=0Ah instead SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah,INT 31/AX=0507h --------E-21251F----------------------------- INT 21 P - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES AX = 251Fh BL = address type 00h linear address ECX = linear address of first page table entry EDX = linear address of second page table entry 01h pointer ES:ECX -> first page table entry ES:EDX -> second page table entry Return: CF clear if successful CF set on error EAX = error code 09h invalid address or NOPAGE option set 82h not compatible with DPMI SeeAlso: AX=251Dh,AX=251Eh --------E-212520----------------------------- INT 21 P - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS AX = 2520h DS:EDX -> pointer to buffer at least 100 bytes in size (see #0521) BL = 0 (don't reset VM stats), 1 (reset VM stats) Return: carry flag clear Format of Phar Lap VM statistics buffer: Offset Size Description (Table 0521) 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 pages to which swap file can be increased 50h DWORD "vmflags" bit 0 = 1 if page fault in progress ---v4.0+ --- 54h DWORD number of physical pages guaranteed to be free 58h DWORD number of free physical pages currently available 5Ch DWORD size in pages of largest free block of memory (including disk swap space) 60h DWORD reserved --------E-212521----------------------------- INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEM 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 --------E-212522----------------------------- INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY ALTERNATE PAGE-FAULT HANDLR AX = 2522h ES:EBX -> alternate handler for page faults Return: CF clear ES:EBX -> previous page-fault handler SeeAlso: AX=2523h --------E-212523----------------------------- INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY OUT-OF-SWAP-SPACE HANDLER AX = 2523h ??? Return: ??? Note: this function takes a DWORD pointer and a DWORD pointer to a DWORD pointer as arguments SeeAlso: AX=2522h --------E-212524----------------------------- INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - INSTALL PAGE-REPLACEMENT HANDLERS AX = 2524h ??? Return: ??? Note: this function takes three DWORD pointers and three DWORD pointers to DWORD pointers as arguments --------E-212525----------------------------- INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENT'L 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 --------E-212526----------------------------- INT 21 P - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION AX = 2526h ??? Return: ??? Notes: details are not yet available this function takes a pointer to the configuration buffer (see #0522) and a poitner to a BYTE as arguments Format of Phar Lap configuration buffer: Offset Size Description (Table 0522) 00h DWORD flags 1 (see #0523) 04h DWORD flags 2 (unused through v5.0) 08h DWORD flags 3 (unused through v5.0) 0Ch DWORD 386|DOS-Extender major version 10h DWORD 386|DOS-Extender minor version 14h DWORD first letter of text after minor version number in version str 18h DWORD beta flag (00h normal release, 01h beta release) 1Ch DWORD processor (3 = 386, 4 = 486) 20h DWORD coprocessor (4 = none, 6 = 287, 7 = 387/486) 24h DWORD Weitek coprocessor flag (0 = none, 1 = present) 28h DWORD machine type (0 = IBM PC compatible, 1 = NEC 9800 series) 2Ch DWORD machine class IBM: bus type (0=ISA, 1=MCA, 2=XT, 3=EISA) NEC: 0=normal mode, 1=high-res mode 30h DWORD VCPI flag (0 = none, 1 = present) 34h DWORD -WEITEK/-1167 switch (0 = AUTO, 1 = ON, 2 = OFF) 38h DWORD -MINREAL setting 3Ch DWORD -MAXREAL setting 40h DWORD -MINIBUF setting 44h DWORD -MAXIBUF setting 48h DWORD size in bytes of DOS call data buffer 4Ch DWORD number of interrupt stacks (-NISTACK) 50h DWORD interrupt stack size (-ISTKSIZE) 54h DWORD -REALBREAK setting 58h DWORD -CALLBUFS 5Ch DWORD -HWIVEC 60h DWORD -PRIVEC 64h DWORD -INTMAP 68h DWORD -PRIMAP 6Ch DWORD VCPI: master 8259 interrupt vector base (IRQ0 mapping) 70h DWORD VCPI: slave 8259 interrupt vector base (IRQ8 mapping) 74h DWORD BIOS print screen interrupt vector (0 if NEC) 78h DWORD -EXTLOW setting 7Ch DWORD -EXTHIGH setting 80h DWORD lowest physical extended-memory address allocatable 84h DWORD highest physical extended-memory address allocatable + 1 88h DWORD special memory's physical base address (00000000h if none) 8Ch DWORD special memory size in bytes (00000000h if none) 90h DWORD -MAXVCPIMEM setting 94h DWORD -VSCAN 98h DWORD -SWAPCHK (0 = OFF, 1 = ON, 2 = FORCE, 3 = MAX) 9Ch DWORD -CODESIZE setting A0h DWORD minimum swap file size (-MINSWFSIZE) A4h DWORD maximum swap fiel size (-MAXSWFSIZE) A8h DWORD page replacement policy (0 = LFU, 1 = NUR) ACh DWORD number of GDT entries (-NGDTENT) B0h DWORD number of LDT entries (-NLDTENT) B4h DWORD program's privilege level (0-3) ---386|DOS-Extender v3.0+ --- B8h DWORD -LOCKSTACK setting BCh DWORD -MAXEXTMEM C0h DWORD -MAXXMSMEM C4h DWORD -MAXPGMMEM C8h DWORD -DATATHRESHOLD CCh DWORD virtual memory manager flag (0 = not present, 1 = present) D0h DWORD Cyrix coprocessor flag (0 = no Cyrix EMC387, 1 = present) D4h DWORD -CYRIX setting (0 = AUTO, 1 = ON, 2 = OFF) D8h DWORD DPMI flag (0 = not present, 1 = present) DCh DWORD DPMI major version E0h DWORD DPMI minor version E4h DWORD DPMI capabilities flags (see #0524) E8h DWORD VCPI major version ECh DWORD VCPI minor version F0h WORD VCPI: IRQ0-7 physical base interrupt vector F2h WORD VCPI: IRQ8-15 physical base interrupt vector F4h DWORD XMS flag (0 = none, 1 = present) F8h DWORD XMS major version FCh DWORD XMS minor version 100h WORD application's CS selector 102h WORD application's DS selector 104h WORD application's PSP selector 106h WORD application's environment selector 108h WORD selector mapping entire first megabyte 10Ah WORD selector mapping text video memory 10Ch WORD selector mapping video memory (text for IBM, graphics for NEC) 10Eh WORD selector mapping Weitek address space, 0000h if not present 110h WORD selector mapping Cyrix EMC387 address space, 0000h if none 112h WORD reserved (0) 114h DWORD real-mode FAR entry point to call to switch to protected mode with no saved context 118h DWORD size of LDT in bytes ---386|DOS-Extender v5.0+ --- 11Ch DWORD Windows flag (0 = not present, 1 = Windows present) 120h DWORD Windows major version 124h DWORD Windows minor version 128h DWORD Windows mode (0 = real/standard, 1 = enhanced) 12Ch DWORD OS/2 flag (0 = not present, 1 = OS/2 present) 130h DWORD OS/2 major version 134h DWORD OS/2 minor version 138h 50 DWORDs reserved (0) Bitfields for flags 1: Bit(s) Description (Table 0523) 0 -NOPAGE specified 1 -A20 specified 2 -VDISK specified 3 -XT specified 4 -AT specified 5 -MCA specified 6 -EISA specified 7 -NORMRES specified (NEC only) 8 -HIGHRES specified (NEC only) 9 set if -SWFGROW1ST, clear if -NOSWFGROW1ST 10 -NOVM specified 11 -SAVEREGS specified 12 unused (clear) 13 -NOVCPI specified 14 -NOMUL specified 15 -NOBMCHK specified 16 -NOSPCLMEM or -NOBIM 17 -NOPGEXP specified 18 -SWAPDEFDISK specified ---v3.0+ --- 19 -SAVEINTS specified 20 -NOLOAD specified 21 -PAGELOG specified 22 -OPENDENY specified 23 -ERRATA17 specified ---v4.1+ --- 24 -NESTDPMI specified 25 -NONESTDPMI specified 26 -NODPMI specified 27 -NOPCDWEITEK specified ---v4.2+ --- 28 -WININT21 specified Bitfields for DPMI capabilities flags: Bit(s) Description (Table 0524) 0 paging supported 1 physical device mapping 2 conventional memory mapping 3 exceptions restartable --------E-212527----------------------------- INT 21 P - Phar Lap 386/DOS-Extender VMM - EN/DISABLE STATE SAVE ON INTERRUPTS AX = 2527h EBX = new status (00h disabled, 01h enabled) Return: CF clear EBX = previous state save flag SeeAlso: AX=2528h --------E-212528----------------------------- INT 21 P - Phar Lap 386/DOS-Extender VMM - READ REGISTERS AFTER CTRL-C INT AX = 2528h DS:EBX -> buffer for registers (see #0525) Return: CF clear if successful DS:EBX buffer filled CF set on error EAX = error code 83h interrupt state save not enabled 84h no active interrupt SeeAlso: AX=2527h Format of Phar Lap buffer for registers: Offset Size Description (Table 0525) 00h 8 BYTEs unused 08h 4 DWORDs EAX,EBX,ECX,EDX 18h 4 DWORDs ESI,EDI,EBP,ESP 28h 6 WORDs CS,DS,SS,ES,FS,GS 34h DWORD EIP 38h DWORD EFLAGS --------E-212529----------------------------- INT 21 P - Phar Lap 386/DOS-Extender - LOAD FLAT MODEL .EXP or .REX FILE AX = 2529h ??? Return: ES:EBX -> parameter block (see #0526) ??? Note: details not available at this time SeeAlso: AX=252Ah Format of Phar Lap program load parameter block: Offset Size Description (Table 0526) 00h DWORD initial EIP 04h WORD initial CS 06h DWORD initial ESP 0Ah WORD initial SS 0Ch 4 WORDs initial DS, ES, FS, GS 14h DWORD minimum size in bytes of program segment 18h DWORD bytes of additional memory allocated 1Ch DWORD flags bit 0: child linked with -UNPRIVILEGED ---v6.0+ --- bit 1: child is PE file instead of .EXP bit 2: loaded file is a DLL bits 3-31 reserved ---v6.0+ --- 20h DWORD module handles (PE files only) 24h 7 DWORDs reserved (0) --------E-21252A----------------------------- INT 21 P - Phar Lap 386/DOS-Extender VMM - NEW LOAD PROGRAM FOR DEBUG AX = 252Ah DS:EDX -> ASCIZ program name ES:EBX -> parameter block (see #0520) ECX = size of LDT buffer in bytes ESI = bit flags bit 0: allow demand paging rather than loading entire program bit 1: demand page from swap file rather than from .EXP Return: CF clear if successful EAX = VMM handle or FFFFFFFFh if none ECX = number of descriptors in LDT buffer CF set on error EAX = error code 02h file error EBX = file error code (see #0527) ECX = DOS error code if EBX=1,2,3, or 8 08h insufficient memory EBX = memory error code (see #0528) 80h LDT buffer too small 87h called twice without intervening call to AX=2531h SeeAlso: AX=2512h,AX=2517h,AX=2529h,AX=2531h (Table 0527) Values for Phar Lap file error code: 01h DOS open error 02h DOS seek error 03h DOS read error 04h not an .EXP or .REX file 05h invalid file format 06h -OFFSET is not a multiple of 64K 07h -NOPAGE incompatible with -REALBREAK/-OFFSET 08h DOS error loading .EXE file (Table 0528) Values for Phar Lap memory error code: 01h out of physical memory 02h out of swap space 04h unable to change extended memory allocation 05h -MAXPGMMEM exceeded 06h insufficient low memory to REALBREAK value 07h insufficient low memory for PSP and environment --------E-21252BBH00------------------------- INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE UNMAPPED PAGES AX = 252Bh BH = 00h ??? Return: ??? --------E-21252BBH01------------------------- INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE ALLOCATED PAGES AX = 252Bh BH = 01h ??? Return: ??? --------E-21252BBH02------------------------- INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE PHYSICAL DEVICE PAGES AX = 252Bh BH = 02h ??? Return: ??? --------E-21252BBH03------------------------- INT 21 Pu - Phar Lap 386/DOS-Extender - MAP DATA FILE AX = 252Bh BH = 03h ??? Return: ??? SeeAlso: AX=252Bh/BL=0Bh --------E-21252BBH04------------------------- INT 21 Pu - Phar Lap 386/DOS-Extender - GET PAGE TYPES AX = 252Bh BH = 04h ??? Return: ??? Note: returns one word per page SeeAlso: #0529 Bitfields for Phar Lap page information: Bit(s) Description (Table 0529) 7 mapped to read/write data file 6 mapped to read-only data file 5 swapped to disk 4 locked 3-0 page type 0 unmapped 1 allocated 2 physical device page --------E-21252B----------------------------- INT 21 P - Phar Lap 386/DOS-Extender - 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: this function is also supported by FlashTek X-32VM; if X-32 is not using virtual memory, this function always succeeds --------E-21252B----------------------------- INT 21 Pu - Phar Lap 386/DOS-Extender - FREE PHYSICAL PAGES AX = 252Bh BH = function (07h,08h) ??? Return: ??? --------E-21252BBH09------------------------- INT 21 P - Phar Lap 386/DOS-Extender v4.1 - GET PAGETABLE ENTRY/PAGE TABLE INFO AX = 252Bh BH = 09h BL = subfunction 00h get page table entry by linear address ECX = linear address for which to get page table entry 01h get page table entry by logical address ES:ECX = address for which to get page table entry Return: CF clear if successful EAX = page table entry EBX = additional page table information CF set on error EAX = error code 0009h invalid address 0082h running under DPMI SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah --------E-21252BBH0A------------------------- INT 21 P - Phar Lap 386/DOS-Extender v4.1 - SET PAGETABLE ENTRY/PAGE TABLE INFO AX = 252Bh BH = 0Ah BL = subfunction 00h set page table entry for linear address ECX = linear address for which to get page table entry 01h set page table entry for logical address ES:ECX = address for which to get page table entry ESI = page table entry EDI = additional page table information Return: CF clear if successful CF set on error EAX = error code 0009h invalid address 0082h running under DPMI SeeAlso: AX=252Bh/BH=09h --------E-21252BBH0B------------------------- INT 21 P - Phar Lap 386/DOS-Extender v4.1+ - MAP DATA FILE AT FILE OFFSET AX = 252Bh BH = 0Bh BL = subfunction 00h by linear address ECX = linear address at which to map data file 01h by logical address ES:ECX = logical address at which to map data file EDX = number of bytes to map DS:ESI -> mapping structure (see #0530) DS:EDI -> ASCIZ filename Return: CF clear if successful CF set on error EAX = error code 0002h file error ECX = phase (01h opening file, 02h seeking, 03h reading) EDX = error code returned by DOS 0009h invalid address 0081h invalid parameters or 386|VMM not present 0086h all 386|VMM file handles already in use SeeAlso: AX=252Bh/BH=03h,AX=252Bh/BH=09h Format of Phar Lap mapping structure: Offset Size Description (Table 0530) 00h DWORD starting file offset to be mapped 04h DWORD DOS file access and sharing modes (see #0559 at INT 21/AH=3Dh) --------E-21252C----------------------------- INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ADD UNMAPPED PAGES AT END OF SEGMENT AX = 252Ch BX = segment selector ECX = number of 4K pages to add Return: CF clear if successful EAX = offset in segment of beginning of unmapped pages CF set on error EAX = error code 08h insufficent memory 09h invalid selector 82h not supported by current DPMI --------E-21252D----------------------------- INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - CLOSE VMM FILE HANDLE AX = 252Dh EBX = VMM file handle Return: CF clear if successful CF set on error EAX = error code (81h invalid VMM handle) --------E-21252E----------------------------- INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - GET/SET VMM PARAMETERS AX = 252Eh CL = direction (00h get parameters, 01h set parameters) DS:EBX -> parameter buffer (see #0531) Return: CF clear if successful CF set on error EAX = error code (81h bad parameter value) Format of Phar Lap VMM parameter buffer: Offset Size Description (Table 0531) 00h DWORD flags bit 0: page fault logging enabled ---v5.0+ --- bit 1: swap extender to disk during DOS EXEC call bit 2: don't zero allocated memory 04h DWORD scan period for page aging, in milliseconds 08h DWORD maximum size (in bytes) to check on each page scan 0Ch 52 BYTEs unused --------E-21252F----------------------------- INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - WRITE RECORD TO VMM PAGE LOG FILE AX = 252Fh DS:EBX -> data to be written CX = size of data in bytes Return: CF clear if successful CF set on error EAX = error code (85h no page log file or not 386/VMM) --------E-212530----------------------------- INT 21 P - Phar Lap 386/DOS-Ext VMM v2.3+ - SET SIZE OF BUFFER FOR DOS CALLS AX = 2530h ECX = size of data buffer in bytes (1024 to 65536) Return: CF clear if successful CF set on error EAX = error code 08h insufficient low memory 81h invalid size SeeAlso: AX=2517h --------E-212531----------------------------- INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0 - READ/WRITE LDT DESCRIPTOR AX = 2531h BX = segment selector ECX = direction (00h read, 01h write) DS:EDX -> 8-byte buffer for descriptor contents Return: CF clear if successful CF set on error EAX = error code 81h invalid selector 82h DPMI running, or not a code or data segment --------E-212532----------------------------- INT 21 P - Phar Lap 386/DOS-Extender - 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) Notes: this call is also supported by the FlashTek X-32VM extender this function is incompatible with 386|VMM; use AX=2522h instead SeeAlso: AX=2522h,AX=2533h --------E-212533----------------------------- INT 21 P - Phar Lap 386/DOS-Extender - 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) Notes: this call is also supported by the FlashTek X-32VM extender this function is incompatible with 386|VMM; use AX=2522h instead SeeAlso: AX=2522h,AX=2532h --------E-212534----------------------------- INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - GET INTERRUPT FLAG AX = 2534h Return: CF clear EAX = interrupt state (00h disabled, 01h enabled) --------E-212535----------------------------- INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - READ/WRITE SYSTEM REGISTERS AX = 2535h EBX = direction (00h read registers, 01h write) DS:EDX -> system register record (see #0532) Return: CF clear Note: this call is only available under MS Windows if PHARLAP.386 VDD is installed Format of Phar Lap system register record: Offset Size Description (Table 0532) 00h DWORD CR0 04h 4 DWORDs DR0,DR1,DR2,DR3 14h 2 DWORDs reserved 1Ch 2 DWORDs DR6,DR7 24h 3 DWORDs reserved --------E-212536---------------------------- INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0+ - MIN/MAX EXTENDED/CONV MEMORY USAGE AX = 2536h EBX = bit flags bit 0: modifying conventional memory rather than extended memory bit 1: setting maximum memory usage rather than minimum ECX = new limit in 4K pages Return: CF clear if successful EAX = new limit CF set on error EAX = error code (08h memory error or -NOPAGE set) EBX = maximum limit in pages ECX = minimum limit in pages --------E-212537---------------------------- INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ALLOCATE DOS MEMORY ABOVE DOS BUFFER AX = 2537h BX = number of paragraphs to allocate Return: CF clear if successful AX = real-mode segment of allocated block CF set on error AX = error code 07h MS-DOS memory chain corrupted 08h insufficient low memory BX = size in paragraphs of largest free block SeeAlso: AH=48h --------E-212538---------------------------- INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - READ PROTMODE REGS AFTER SFTWARE INT AX = 2538h DS:EBX -> buffer for registers (see #0525) ECX = register record to retrieve 00h first interrupt state 01h next interrupt state EDX = handle for current interrupt state Return: CF clear if successful DS:EBX buffer filled EDX = handle of current interrupt state ESI = number of interrupt which occurred CF set on error EAX = error code 81h invalid handle in EDX 83h register saving not enabled 84h no more interrupt states SeeAlso: AX=2527h,AX=2528h --------E-212539---------------------------- INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - GET OFFSET OF .EXP FILE HEADER AX = 2539h BX = MS-DOS file handle for open file Return: CF clear if successful EAX = offset of .EXP header in file CF set on error EAX = error code (02h file error) EBX = file error code 02h DOS error seeking 03h DOS error reading 04h invalid file type 05h invalid file format ECX = DOS error code if EBX=02h or 03h current file position in file modified --------E-21253A---------------------------- INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - INSTALL MOD. SEG FAILURE HANDLER AX = 253Ah ES:EBX -> function to be called when INT 21/AH=4Ah is about to return an error Return: CF clear ES:EBX -> previous handler SeeAlso: AH=4Ah --------E-21253B---------------------------- INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - JUMP TO REAL MODE CODE, NO CONTEXT AX = 253Bh DS:EBX -> buffer containing register contents (see #0525) Return: never returns SeeAlso: AX=2528h --------E-21253C----------------------------- INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0+ - SHRINK 386|VMM SWAP FILE AX = 253Ch Return: CF clear EAX = old size of swap file in bytes EBX = new size of swap file in bytes --------E-21253D----------------------------- INT 21 P - Phar Lap 386/DOS-Extender v4.0+ - READ/WRITE IDT DESCRIPTOR AX = 253Dh BL = interrupt number ECX = direction (0 = read, 1 = write) DS:EDX -> 8-byte buffer for descriptor Return: CF clear if successful DS:EDX filled if reading CF set on error EAX = error code (0082h if running under DPMI) Desc: access hardware-level IDT rather than the internal 386/DOS-Extender shadow IDT Notes: this call will always fail under DPMI because it is not possible to access the IDT the descriptor is not checked when writing this call can normally be used only by programs running in ring 0 because the processor does not allow an interrupt to be vectored to a less privileged ring --------E-21253F----------------------------- INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - ALLOCATE LDT DESCRIPTOR AX = 253Fh BX = LDT descriptor to allocate (0000h for any) ??? Return: ??? --------E-212540----------------------------- INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - FORCE ALIAS OF SEGMENT AX = 2540h ??? Return: ??? --------E-212544----------------------------- INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - FREE DLL AX = 2544h ??? Return: ??? --------E-212545----------------------------- INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - GET/SET PROCEDURE ADDRESS AX = 2545h ECX = direction (00h get, 01h set) ??? Return: ??? --------E-212546----------------------------- INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - GET MODULE HANDLE AX = 2546h ??? Return: ??? --------E-2125C0----------------------------- INT 21 P - 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 --------E-2125C1----------------------------- INT 21 P - 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 --------E-2125C2----------------------------- INT 21 P - 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 --------E-2125C3----------------------------- INT 21 P - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM AX = 25C3h ES:EBX -> pointer to parameter block (see #0534) DS:EDX -> pointer to ASCIZ program filename Return: CF clear if successful all registers unchanged CF set on error EAX = error code (see #0533) (Table 0533) Values for Phar Lap 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 (Table 0534) 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 --------D-2126------------------------------- INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX AH = 26h DX = segment at which to create PSP (see #0535) Notes: new PSP is updated with memory size information; INTs 22h, 23h, 24h taken from interrupt vector table; the parent PSP field is set to 0 (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 Program Segment Prefix (PSP): Offset Size Description (Table 0535) 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 (DOS) unused filler (OS/2) count of fake DOS version returns 05h BYTE CP/M CALL 5 service request (FAR CALL to absolute 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 (see #0536) 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 BYTE DOS 4+ (DBCS) interim console flag (see AX=6301h) 3Dh BYTE (APPEND) TrueName flag (see INT 2F/AX=B711h) 3Eh BYTE (Novell NetWare) flag: next byte initialized if CEh (OS/2) capabilities flag 3Fh BYTE (Novell NetWare) Novell task number if previous byte is CEh 40h 2 BYTEs DOS 5+ version to return on INT 21/AH=30h 42h WORD (MSWindows3) selector of next PSP (PDB) in linked list Windows keeps a linked list of Windows programs only 44h WORD (MSWindows3) "PDB_Partition" 46h WORD (MSWindows3) "PDB_NextPDB" 48h BYTE (MSWindows3) bit 0 set if non-Windows application (WINOLDAP) 49h BYTE unused by DOS versions <= 6.00 4Ch WORD (MSWindows3) "PDB_EntryStack" 4Eh 2 BYTEs unused by DOS versions <= 6.00 50h 3 BYTEs DOS 2+ service request (INT 21/RETF instructions) 53h 2 BYTEs unused in DOS versions <= 6.00 55h 7 BYTEs unused in DOS versions <= 6.00; can be used to make first FCB into an extended FCB 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 v3+, 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 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 also uses values from FEh down to 80h or one more than FILES= (whichever is greater) to indicate remote files MS-DOS 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). Novell NetWare updates the fields at offsets 3Eh and 3Fh without checking that a legal PSP segment is current; see AH=50h for further discussion Format of environment block: Offset Size Description (Table 0536) 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 --------D-2127------------------------------- INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE AH = 27h CX = number of records to read DS:DX -> opened FCB (see #0506) 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 --------D-2128------------------------------- INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE AH = 28h CX = number of records to write DS:DX -> opened FCB (see #0506) [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 --------D-2129------------------------------- INT 21 - DOS 1+ - PARSE FILENAME INTO FCB AH = 29h AL = parsing options (see #0537) 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 #0506) 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+) Novell NetWare monitors the result code since an 'invalid drive' may signal an attempt to reconnect a network drive; if there are no connections to the specified drive, NetWare attempts to build a connection and map the drive to the SYS:LOGIN directory SeeAlso: AH=0Fh,AH=16h,AH=26h Bitfields for parsing options: Bit(s) Description (Table 0537) 0 skip leading separators 1 use existing drive number in FCB if no drive is specified, instead of setting field to zero 2 use existing filename in FCB if no base name is specified, instead of filling field with blanks 3 use existing extension in FCB if no extension is specified, instead of filling field with blanks 4-7 reserved (0) --------D-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 --------D-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 --------E-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 --------c-212B--CX4358----------------------- INT 21 - Super PC-Kwik v3.20+ - INSTALLATION CHECK AH = 2Bh CX = 4358h ('CX') Return: AL = FFh if PC-Kwik/PC-Cache not installed AL = 00h if installed CF clear CX = 6378h ('cx') BX = ??? DX = version (DH = major version, DL = binary minor version) Note: PC Tools PC-Cache v5.x and Qualitas Qcache v4.00 are OEM versions of Super PC-Kwik, and thus support this call (PC-Cache 5.1 corresponds to PC-Kwik v3.20) SeeAlso: INT 13/AH=A0h,INT 13/AH=B0h,INT 16/AX=FFA5h/CX=1111h Index: PC-Cache;installation check|Qualitas Qcache;installation check Index: installation check;PC-Cache 5.x|installation check;Qualitas Qcache --------Q-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.50-2.52 are part of DESQview/X v1.0x; version 2.53 is part of DESQview/X v1.10; and version 2.63 is part of DESQview/X v2.00. 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 --------U-212B--CX454C----------------------- INT 21 - ELRES v1.1 - INSTALLATION CHECK AH = 2Bh CX = 454Ch ('EL') DX = 5253h ('RS') Return: ES:BX -> ELRES history structure (see #0538) DX = DABEh (signature, DAve BEnnett) Program: ELRES is an MS-DOS 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 (Table 0538) 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 --------m-212B01CX444D----------------------- INT 21 - Quarterdeck DOS-UP.SYS v2.00 - INSTALLATION CHECK AX = 2B01h CX = 444Dh ('DM') DX = 4158h ('AX') Return: AX = 0000h if installed BX = version??? (0002h) CX = 4845h ('HE') DX = 5245h ('RE') ES = DOS-UP driver segment --------T-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 #0539,#0543,#0544) Program: 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 (Table 0539) 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 interrupts already grabbed by TAME (see #0540) 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 (see #0541) 4Bh BYTE type of task switching selected bit 0: DESQview??? bit 1: DoubleDOS??? bit 2: TopView??? bit 3: KeySwitch bit 4: HLT instruction 4Ch BYTE ??? 4Dh BYTE flags bit 1: /FREQ instead of /MAX 4Eh BYTE /FG: value 4Fh BYTE task switches left until next FGONLY DESQview API call 50h BYTE ??? Bitfields for interrupts already grabbed by TAME: Bit(s) Description (Table 0540) 0 INT 10h 1 INT 14h 2 INT 15h 3 INT 16h 4 INT 17h 5 INT 21h 6 INT 28h (Table 0541) Values for multitasker type: 01h DESQview 02h DoubleDOS 03h TopView 04h OmniView 05h VM/386 Bitfields for type of task switching selected: Bit(s) Description (Table 0542) 0 DESQview 1 DoubleDOS 2 TopView 3 OmniView 4 KeySwitch 5 HLT instruction Format of TAME 2.30 data area: Offset Size Description (Table 0543) 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 interrupts already grabbed by TAME (see #0540) 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 (see #0541) 60h BYTE type of task switching selected (bit flags) (see #0542) 61h BYTE watch_DOS 62h BYTE bit flags bit 0: TAME enabled bit 1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick) bit 2: /TIMEPOLL bit 3: /KEYPOLL bit 4: inhibit timer bit 5: enable status monitoring 63h BYTE old status 64h WORD signature DA34h Format of TAME 2.60 data area: Offset Size Description (Table 0544) 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 remaining until next FGONLY DESQview API call 64h WORD multitasker version ??? 66h WORD virtual screen segment 68h BYTE interrupts already grabbed by TAME (see #0540) 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 (see #0541) 6Ch BYTE type of task switching selected (bit flags) (see #0542) 6Dh BYTE watch_DOS 6Eh BYTE bit flags bit 0: TAME enabled bit 1: /FREQ instead of /MAX (counts in 50h and 52h per tick) bit 2: /TIMEPOLL bit 3: /KEYPOLL bit 4: inhibit timer bit 5: enable status monitoring 6Fh BYTE old status 70h WORD signature DA34h --------v-212B16CX0643----------------------- INT 21 - VIRUS - "Maltese Amoeba" - INSTALLATION CHECK AX = 2B16h CX = 0643h Return: AX = 1603h if installed --------R-212B44BX4D41----------------------- INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK AX = 2B44h ('D') BX = 4D41h ('MA') CX = 7063h ('pc') DX = 4157h ('AW') Return: AX = resident program 4F4Bh ('OK') if large host resident 6F6Bh ('ok') if small host resident CX:DX -> API entry point (see #0545) SeeAlso: INT 16/AH=79h (Table 0545) Call pcANYWHERE 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 #0546) Return: AX = function status (see #0549) AX = 0002h get status Return: AH = current operating mode (see init req structure below) AL = current connection status (see #0548) AX = 0003h suspend remote screen updates Return: AX = function status (see #0549) AX = 0004h resume screen updates Return: AX = function status (see #0549) AX = 0005h end current remote access session DS:SI -> termination request structure (see #0547) Return: AX = function status (see #0549) AX = 0006h remove pcANYWHERE IV from memory Return: AX = status (see #0549) 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 pcANYWHERE initialization request structure: Offset Size Description (Table 0546) 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 pcANYWHERE termination request structure: Offset Size Description (Table 0547) 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 Bitfields for current connection status: Bit(s) Description (Table 0548) 0 a physical connection is active 1 remove screen updating is active 2 connection checking is active 3 hot key detection is active 4 background file transfer is active (Table 0549) Values for pcANYWHERE function status: 0000h function completed successfully FFD1h unable to release interrupt vectors FFD2h unable to release allocated memory 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 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 ----------212B--CX6269----------------------- INT 21 - WDTSR.COM - INSTALLATION CHECK AH = 2Bh CX = 6269h ('bi') DX = 742Dh ('t-') Return: AL = FFh if not installed AL = 77h ('w') if WDTSR is installed CX = 6174h ('at') DX = 6368h ('ch') ES = resident code segment ES:DI -> identification and configuration data Program: WDTSR is a driver for the bitWatch watchdog hardware by bit-design GmbH SeeAlso: AH=2Bh/CX=6269h"bitFOSSI",INT 14/AH=14h"FOSSIL",INT 15/AH=C3h --------S-212B--CX6269----------------------- INT 21 - bitFOSS - INSTALLATION CHECK AH = 2Bh CX = 6269h ('bi') DX = 7446h ('tF') Return: AL = FFh if not installed AL = 4Fh ('O') if bitFOSS is installed CX = 5353h ('SS') DX = 494Ch ('IL') ES = resident code segment ES:DI -> identification data Program: bitFOSS is a revision 5 FOSSIL driver SeeAlso: AH=2Bh/CX=6269h"bitFOSSI",INT 11/AH=BCh --------S-212B--CX6269----------------------- INT 21 - bitFOSSI - INSTALLATION CHECK AH = 2Bh CX = 6269h ('bi') DX = 7449h ('tI') Return: AL = FFh if not installed AL = 53h ('S') if bitFOSSI is installed CX = 444Eh ('DN') DX = 2D46h ('-F') ES = resident code segment ES:DI -> identification data Program: bitFOSSI is a revision 5 FOSSIL driver for ???'s ISDN board SeeAlso: AH=2Bh/CX=6269h/DX=7446h,INT 11/AH=BCh --------D-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 --------v-212C00CX534B----------------------- INT 21 - SKUDO - INSTALLATION CHECK AX = 2C00h CX = 534Bh ('SK') DX = 5544h ('UD') BX = 4F21h ('O!') Return: AX = 5349h ('SI') if installed CH = version number CL = subversion Program: SKUDO is an antivirus TSR by Jordi Mas --------D-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" --------T-212D01CX7820----------------------- INT 21 - PC-Mix - INSTALLATION CHECK AX = 2D01h CX = 7820h ('X ') DX = 6D69h ('MI') Return: AL = 00h if installed --------D-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 --------D-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 --------D-2130------------------------------- INT 21 - DOS 2+ - GET DOS VERSION AH = 30h ---DOS 5+ --- 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 = MS-DOS OEM number (see #0550) ---if DOS 5+ and AL=01h--- BH = version flag bit 3: DOS is in ROM other: reserved (0) 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 version 5.00, subject to SETVER DOS 4.01 and 4.02 identify themselves as version 4.00; use INT 21/AH=87h to distinguish between the original European MS-DOS 4.0 and the later PC-DOS 4.0x and MS-DOS 4.0x IBM DOS 6.1 reports its version as 6.00; use the OEM number to distinguish between MS-DOS 6.00 and IBM DOS 6.1 (there was never an IBM DOS 6.0) MS-DOS 6.21 reports its version as 6.20; version 6.22 returns the correct value the "Chicago" beta returns version 7.00 (reported in _Microsoft_Systems_Journal_, August 1994). DR-DOS 5.0 and 6.0 report version 3.31; Novell DOS 7 reports v6.00. generic MS-DOS 3.30, Compaq MS-DOS 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 #0800 at AH=52h); the version returned under DOS 5+ 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=4010h,INT 2F/AX=E002h (Table 0550) Values for DOS OEM number: 00h IBM 01h Compaq 02h MS Packaged Product 04h AT&T 05h Zenith 06h Hewlett-Packard 0Dh Packard-Bell 16h DEC 23h Olivetti 29h Toshiba 33h Novell (Windows/386 device IDs only) 34h MS Multimedia Systems (Windows/386 device IDs only) 35h MS Multimedia Systems (Windows/386 device IDs only) 4Dh Hewlett-Packard 66h PhysTechSoft (PTS-DOS) 99h General Software's Embedded DOS EEh DR-DOS EFh Novell DOS FFh Microsoft, Phoenix --------E-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 --------v-2130--DXABCD----------------------- INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK AH = 30h DX = ABCDh Return: DX = DCBAh if installed SeeAlso: AX=0D20h,AX=30F1h --------T-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 Program: CTask is a multitasking kernel for C written by Thomas Wagner Note: if first eight bytes of returned data block equal eight bytes passed in, CTask is resident --------O-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 MS-DOS-compatible operating system by The Software Link, Inc. SeeAlso: AH=30h,INT 38/AH=02h,INT 38/AH=10h --------G-213022----------------------------- INT 21 - StopPrg v2.0 - INSTALLATION CHECK AX = 3022h Return: AX = DOS version (see AH=30h) CX = 1112h if StopPrg installed BX = segment of resident code Program: StopPrg is a resident program aborter by MAK-TRAXON's Prophet Note: StopPrg may be temporarily disabled by storing 9090h in the word at 0000h:04FEh --------v-2130F1----------------------------- INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK AX = 30F1h Return: AL = 00h if resident SeeAlso: AH=30h/DX=ABCDh,AX=330Fh ----------2130FFCX4445----------------------- INT 21 - DESQ??? - INSTALLATION CHECK AX = 30FFh CX = 4445h ("DE") DX = 5351h ("SQ") Return: BH = 05h if installed ??? Note: called by DUBLDISK.COM v2.6; this function is not supported by DESQview, so it may be for DESQview's precursor DESQ. SeeAlso: AX=4404h"DUBLDISK" --------D-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 #0535 at AH=26h,AH=49h) SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27 --------D-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) (see #0551) 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 #0765 at 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 supported by DR-DOS 3.41+; DR-DOS 3.41-6.0 return the same data as MS-DOS 3.31 SeeAlso: AH=1Fh,AH=52h Format of DOS Drive Parameter Block: Offset Size Description (Table 0551) 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-6.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 SeeAlso: #0801 --------D-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 = new state 00h off, check only on character I/O functions 01h on, check on all DOS functions Return: (Novell DOS 7) DL = old state of extended Break checks Note: under DOS 3.1+ and DR-DOS, this function does not use any of the DOS-internal stacks and may thus be called at any time SeeAlso: AX=3302h --------D-213302----------------------------- INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE AX = 3302h DL = new state (00h for OFF, 01h for ON) Return: DL = old state of extended BREAK checking Notes: 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 not supported by DR-DOS through version 6.0; newly-supported by Novell DOS 7 SeeAlso: AH=33h --------D-213303----------------------------- INT 21 - DOS 4+ - UNUSED AX = 3303h Return: nothing Note: this function and AX=3304h were apparently intended to support a code-page switching flag for OS/2 compatibility (OS/2 allows a file to have a code page as an attribute); however, this function has always been a NOP in public releases of DOS. See _DOS_Internals_ Chapter 2 for more information SeeAlso: AX=3304h --------D-213304----------------------------- INT 21 - DOS 4+ - UNUSED AX = 3304h Return: nothing Note: this function and AX=3303h were apparently intended to support a code-page switching flag for OS/2 compatibility (OS/2 allows a file to have a code page as an attribute); however, this function has always been a NOP in public releases of DOS. See _DOS_Internals_ Chapter 2 for more information SeeAlso: AX=3303h --------D-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 --------D-213306----------------------------- INT 21 - DOS 5+ - 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 is in HMA AL = FFh if true DOS version < 5.0 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 OS/2 v2.1 will return BX=0A14h (version 20.10) the Windows NT DOS box returns BX=3205h (version 5.50) Novell DOS 7 returns version 6.00 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=122Fh --------N-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+ version call SeeAlso: AX=3306h"DOS" --------v-21330F----------------------------- INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK AX = 330Fh Return: AL = 0Fh if resident (DOS returns AL=FFh) SeeAlso: AX=30F1h,AX=33E0h --------k-213341----------------------------- INT 21 - Diet Disk v1.0 - INSTALLATION CHECK AX = 3341h Return: DX = 1234h if installed CX = resident code segment Program: Diet Disk is a public domain transparent data file compressor by Barry Nance --------v-2133E0----------------------------- INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK AX = 33E0h Return: AL = E0h if resident (DOS returns AL=FFh) SeeAlso: AX=330Fh,AX=357Fh --------D-2134------------------------------- INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG AH = 34h Return: ES:BX -> one-byte InDOS flag Notes: this function executes on the DOS stack, and thus cannot be called while another DOS function is already executing; you should use this function once at the beginning of the program and store the returned pointer rather than calling it when requiring DOS access 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. SMARTDRV 4.0 sets the InDOS flag while flushing its buffers to disk, then zeros it on completion the critical error flag is the byte immediately following InDOS in DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ and DR-DOS 3.41+ (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 15/AX=DE1Fh,INT 28 --------D-2135------------------------------- INT 21 - DOS 2+ - GET INTERRUPT VECTOR AH = 35h AL = interrupt number Return: ES:BX -> current interrupt handler Note: under DR-DOS 5.0+, this function does not use any of the DOS-internal stacks and may thus be called at any time SeeAlso: AH=25h,AX=2503h --------E-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 --------E-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 --------E-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) SeeAlso: AX=3504h,AX=3505h,INT 31/AX=0007h --------E-213504----------------------------- INT 21 P - FlashTek X-32VM - GET SELECTOR BASE ADDRESS AX = 3504h BX = selector Return: CF clear if successful ECX = absolute base address of selector CF set on error (invalid selector) SeeAlso: AX=3503h,INT 31/AX=0006h --------E-213505----------------------------- INT 21 P - FlashTek X-32VM - SET SELECTOR LIMIT AX = 3505h BX = selector ECX = desired limit Return: CF clear if successful ECX = actual limit set CF set on error (no more selectors available) Note: the limit will be rounded down to nearest 4K boundary if the requested limit is greater than 1MB SeeAlso: AX=3503h,INT 31/AX=0008h --------E-21350A----------------------------- INT 21 P - FlashTek X-32VM - PHYSICAL ADDRESS MAPPING AX = 350Ah EBX = absolute physical address ECX = size in bytes of area to map Return: CF clear if successful CF set on error (insufficient memory or service refused by DPMI host) Notes: should not make repeated calls for the same physical address there is no provision for unmapping memory --------E-21350B----------------------------- INT 21 P - FlashTek X-32VM - UPDATE AND RETURN AVAILABLE FREE MEMORY AX = 350Bh DS = default selector for DS Return: CF clear EAX = maximum amount of memory which can be allocated via AX=350Ch SeeAlso: AX=350Ch --------E-21350C----------------------------- INT 21 P - FlashTek X-32VM - ALLOCATE A BLOCK OF MEMORY AX = 350Ch ECX = size of block in bytes DS = default DS Return: CF clear if successful EAX = near pointer to new block EDX = new lowest legal value for stack CF set on error (requested size not multiple of 4K) SeeAlso: AX=350Bh,AX=350Dh --------E-21350D----------------------------- INT 21 P - FlashTek X-32VM - RESERVE BLOCK OF MEMORY FOR 32-BIT STACK AX = 350Dh EBX = current ESP value ECX = size of block in bytes DS = default DS Return: CF clear if successful EBX = new value for ESP EDX = suggested new limit for SS CF set on error Note: this function should only be called once during initialization SeeAlso: AX=350Bh,AX=350Ch --------v-21357F----------------------------- INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK AX = 357Fh Return: DX = FFFFh if installed SeeAlso: AX=33E0h,AX=3DFFh --------D-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' MS-DOS reference, the value in DX is incorrect for non-default drives after ASSIGN is run SeeAlso: AH=1Bh,AH=1Ch --------D-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 AL=00h/DL=2Fh for MS-DOS 5+ and DR-DOS 3.41+ SeeAlso: AX=3701h --------D-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 MS-DOS 5+ and DR-DOS 3.41+; DR-DOS 6.0 leaves AX unchanged SeeAlso: AX=3700h --------D-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 MS-DOS 3.3+ and DR-DOS 3.41+ accept these calls, they have no effect, and AL=02h always returns DL=FFh --------k-2137D0BX899D----------------------- INT 21 - DIET v1.43e - TSR INSTALLATION CHECK AX = 37D0h BX = 899Dh ('DI' + 'ET') Return: AL = FFh if not present as TSR (default return value from DOS) AX = 0000h if installed as a TSR CX = 899Dh DX = version ID Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto SeeAlso: AX=37D1h,AX=37D2h,AX=37D4h,AX=37D6h,AX=37DFh,AX=4BF0h,AX=4BF1h --------k-2137D1BX899D----------------------- INT 21 - DIET v1.43e - GET DIET.EXE RESIDENT SEGMENT AX = 37D1h BX = 899Dh ('DI' + 'ET') Return: AX = 0000h CX = code segment of TSR part of DIET.EXE DX = memory block segment of TSR DIET.EXE (0000h if installed as device driver) SeeAlso: AX=37D0h,AX=37DFh --------k-2137D2BX899D----------------------- INT 21 - DIET v1.43e - GET TSR CONTROL FLAGS AX = 37D2h BX = 899Dh ('DI' + 'ET') Return: AX = 0000h DL = control flag (00h active, else disabled) DH = skip flag (nonzero while TSR active) SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h --------k-2137D3BX899D----------------------- INT 21 - DIET v1.43e - SET TSR CONTROL FLAGS AX = 37D3h BX = 899Dh ('DI' + 'ET') DL = control flag (00h active, else disabled) DH = skip flag (00h) Return: AX = 0000h SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h --------k-2137D4BX899D----------------------- INT 21 - DIET v1.43e - GET TSR OPTIONS AX = 37D4h BX = 899Dh ('DI' + 'ET') Return: AX = 0000h DX = TSR options (see #0552) SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h Bitfields for DIET TSR options: Bit(s) Description (Table 0552) 0 automated compression of DIETed file 1 automated compression of newly-created file 2 suppress DIET message 3 display original file size 4-15 reserved (0) --------k-2137D5BX899D----------------------- INT 21 - DIET v1.43e - SET TSR OPTIONS AX = 37D5h BX = 899Dh ('DI' + 'ET') DX = TSR options (see #0552) Return: AX = 0000h Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h --------k-2137D6BX899D----------------------- INT 21 - DIET v1.43e - GET TEMPORARY DIRECTORY NAMES AX = 37D6h BX = 899Dh ('DI' + 'ET') Return: AX = 0000h DS:DX -> name of temporary directory or 0000h:0000h for current dir SeeAlso: AX=37D0h,AX=37D7h --------k-2137D7BX899D----------------------- INT 21 - DIET v1.43e - SET TEMPORARY DIRECTORY NAMES AX = 37D7h BX = 899Dh ('DI' + 'ET') DS:DX -> ASCIZ name of temporary directory (max 61 chars) 0000h:0000h for current directory Return: AX = 0000h Note: the specified directory name must include a drive letter and end with a backslash SeeAlso: AX=37D0h,AX=37D6h --------k-2137DCBX899D----------------------- INT 21 - DIET v1.43e - SET ADDRESS OF EXTERNAL PROCEDURE AX = 37DCh BX = 899Dh ('DI' + 'ET') DS:DX -> external procedure Return: AX = 0000h Note: the resident code will call the specified external procedure at the beginning of decompression and when compression is exited on failure SeeAlso: AX=37DDh (Table 0553) Values DIET external procedure is called with: STACK: WORD class FFFDh creation failed for unknown reasons FFFEh creation failed due to lack of space FFFFh file creation error else file handle of DIETed file to be decompressed DWORD -> compressed filename DWORD -> decompressed or temporary filename Return: SI,DI,BP,DS,ES must be preserved by external procedure --------k-2137DDBX899D----------------------- INT 21 - DIET v1.43e - RELEASE EXTERNAL PROCEDURE AX = 37DDh BX = 899Dh ('DI' + 'ET') Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto Note: unlinks the external procedure specified by AX=37DCh SeeAlso: AX=37DCh --------k-2137DEBX899D----------------------- INT 21 - DIET v1.43e - READ EMS STATUS AX = 37DEh BX = 899Dh ('DI' + 'ET') Return: AX = 0000h CX = EMS status 0000h not used 0001h used as work area 0002h used for code and as work area DX = EMM handle when EMS is in use --------k-2137DFBX899D----------------------- INT 21 - DIET v1.43e - UNLOAD TSR AX = 37DFh BX = 899Dh ('DI' + 'ET') Return: AX = status 0000h successful 00FFh failed Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto SeeAlso: AX=37D0h Index: uninstall;DIET --------D-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 #0554,#0555) Return: CF set on error AX = error code (02h) CF clear if successful AX = country code (MS-DOS 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 #0555) Return: CF set on error AX = error code (02h) CF clear if successful BX = country code DS:DX buffer filled Note: this function is not supported by the Borland DPMI host, but no error is returned; as a workaround, one should allocate a buffer in conventional memory with INT 31/AX=0100h and simulate an INT 21 with INT 31/AX=0300h SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h Format of DOS 2.00-2.10 country info: Offset Size Description (Table 0554) 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 DOS 2.11+ country info: Offset Size Description (Table 0555) 00h WORD date format (see #0554) 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 (Table 0556) 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/Tjekia (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, MS-DOS 5.0+) 052h Korea (DR-DOS 5.0) 056h China (MS-DOS 5.0+) 058h Taiwan (MS-DOS 5.0+) 05Ah Turkey (MS-DOS 5.0+) 15Fh Portugal 162h Iceland 166h Finland 311h Middle East/Saudi Arabia (DR-DOS 5.0,MS-DOS 5.0+) 3CCh Israel (DR-DOS 5.0,MS-DOS 5.0+) --------D-2138--DXFFFF----------------------- INT 21 - DOS 3+ - SET COUNTRY CODE AH = 38h DX = FFFFh AL = 01h thru FEh for specific country with code <255 AL = FFh for specific country with code >= 255 BX = 16-bit country code (see #0556) Return: CF set on error AX = error code (see #0811 at AH=59h) CF clear if successful Note: not supported by OS/2 SeeAlso: INT 2F/AX=1403h --------D-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 #0811 at 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=6Dh,AH=71h,AH=E2h/SF=0Ah,INT 2F/AX=1103h SeeAlso: INT 60/DI=0511h --------D-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 #0811 at 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=71h,AH=E2h/SF=0Bh,INT 2F/AX=1101h,INT 60/DI=0512h --------D-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 #0811 at 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,AH=71h,INT 2F/AX=1105h --------D-213C------------------------------- INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE AH = 3Ch CX = file attributes (see #0557) DS:DX -> ASCIZ filename Return: CF clear if successful AX = file handle CF set on error AX = error code (03h,04h,05h) (see #0811 at 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 DR-DOS checks the system password or explicitly supplied password at the end of the filename against the reserved field in the directory entry before allowing access SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h,INT 2F/AX=1117h Bitfields for file attributes: Bit(s) Description (Table 0557) 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 --------D-213D------------------------------- INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE AH = 3Dh AL = access and sharing modes (see #0558) 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,56h) (see #0811 at 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 DR-DOS checks the system password or explicitly supplied password at the end of the filename against the reserved field in the directory entry before allowing access sharing modes are only effective on local drives if SHARE is loaded SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1116h,INT 2F/AX=1226h Bitfields for access and sharing modes: Bit(s) Description (Table 0558) 2-0 access mode 000 read only 001 write only 010 read/write 011 (DOS 5+ internal) passed to redirector on EXEC to allow case-sensitive filenames 3 reserved (0) 6-4 sharing mode (DOS 3+) 000 compatibility mode 001 "DENYALL" prohiboth read and write access by others 010 "DENYWRITE" prohiwrite access by others 011 "DENYREAD" prohiread access by others 100 "DENYNONE" allow full access by others 111 network FCB (only available during server call) 7 inheritance if set, file is private to current process and will not be inherited by child processes (Table 0559) Values of DOS 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 --------v-213DFF----------------------------- INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK AX = 3DFFh Return: AX = 4A44h if resident SeeAlso: AX=357Fh,AX=4203h --------D-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 #0811 at 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 --------D-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 #0811 at 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 BUG: Novell NETX.EXE v3.26 and 3.31 do not set CF if the read fails due to a record lock (see AH=5Ch), though it does return AX=0005h; this has been documented by Novell SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h --------G-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 #0561) Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (05h,06h) (see #0811 at AH=59h) SeeAlso: AH=40h"Turbo Debug" (Table 0560) Values for status of Turbo Debugger 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) Format of Turbo Debugger status block: Offset Size Description (Table 0561) 00h BYTE status of command (see #0560) ---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 (see #0562) 07h BYTE supported breakpoint types (see #0563) 08h WORD supported addressing match modes (see #0564) 0Ah WORD supported data matches (see #0565) 0Ch BYTE maximum data match length (01h, 02h, or 04h) 0Dh WORD size of onboard memory (in KB) 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 Bitfields for Turbo Debugger configuration bits: Bit(s) Description (Table 0562) 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 Bitfields for Turbo Debugger supported breakpoint types: Bit(s) Description (Table 0563) 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 Bitfields for Turbo Debugger supported addressing match modes: Bit(s) Description (Table 0564) 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 Bitfields for Turbo Debugger supported data matches: Bit(s) Description (Table 0565) 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 --------N-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 #0566) Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (05h,06h) (see #0811 at 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 v2.1+ uses a new configuration method, but allows the installation of IPCUST.SYS for backward compatibility with other software which must read the PC/TCP configuration SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST",AX=4402h"FTPSOFT" Format of PC/TCP configuration data: Offset Size Description (Table 0566) 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 (big-endian) IP addresses for time servers ??? 164h WORD number of old-style name servers 166h 3 DWORDs (big-endian) IP addresses for name servers 172h WORD number of domain name servers 174h 3 DWORDs (big-endian) IP addresses for domain name servers 180h DWORD (big-endian) IP address of default gateway 184h DWORD (big-endian) IP address of log server 188h DWORD (big-endian) IP address of cookie server 18Ch DWORD (big-endian) IP address of lpr server 190h DWORD (big-endian) 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 ??? --------N-213F------------------------------- INT 21 - WORKGRP.SYS - GET ENTRY POINT AH = 3Fh BX = file handle for device "NET$HLP$" CX = 0008h DS:DX -> buffer for entry point record (see #0636) 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 #0811 at AH=59h) Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which permits communication with PCs running Windows for Workgroups or LAN Manager SeeAlso: AX=4402h"WORKGRP.SYS",INT 2F/AX=9400h --------N-213F------------------------------- INT 21 - BW-TCP - GET DRIVER INFO AH = 3Fh BX = file handle for device "ETHDEV27" CX = 002Bh DS:DX -> buffer for driver info (see #0567) 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 #0811 at AH=59h) Program: BW-TCP is a TCP/IP protocol stack by Beame & Whiteside Software Notes: the B&W socket library performs an INT 21/AX=4401h with DX=0060h before making this call to retrieve the driver information; one should also call the private API interrupt with AH=15h the installation check for the TCP/IP stack is to test for the existence of the character device UDP-IP10 SeeAlso: INT 14/AH=56h,INT 62/AH=00h"ETHDEV",INT 63/AH=03h,INT 64/AH=00h Index: installation check;BW-TCP hardware driver Index: installation check;BW-TCP TCPIP.SYS Format of BW-TCP driver info: Offset Size Description (Table 0567) 00h WORD I/O base address 02h BYTE shared memory page (01h = segment 0100h, etc.) 03h BYTE interrupt vector for private API 04h BYTE IRQ used by board 05h WORD size of data buffer 07h WORD maximum transfer window 09h WORD time zone 0Bh BYTE address type (01h user, 04h RARP, 05h BOOTP) 0Ch DWORD internet address 10h WORD "value" ??? 12h BYTE subnet mask 13h WORD "ether_pointer" ??? 15h WORD offset in device driver of log server records 17h WORD offset in device driver of name server records 19h WORD offset in device driver of print server records 1Bh WORD offset in device driver of time server records 1Dh WORD offset in device driver of gateway records 1Fh WORD segment address of device driver 21h BYTE transfer size 22h 9 BYTEs network adapter board name ---11/21/91+ --- 23h BYTE ETHDEV version (major in high nybble, minor in low nybble) 24h BYTE ETHDEV revision 25h BYTE TCPIP version (major in high nybble, minor in low nybble) 26h BYTE TCPIP revision 27h BYTE BWRPC version (major in high nybble, minor in low nybble) 28h BYTE BWRPC revision 29h BYTE BWNFS version (major in high nybble, minor in low nybble) 2Ah BYTE BWNFS revision 2Bh BYTE Telnet version (major in high nybble, minor in low nybble) 2Ch BYTE Telnet revision 2Dh BYTE NETBIOS version (major in high nybble, minor in low nybble) 2Eh BYTE NETBIOS revision Note: for each driver, if version=0, the driver is not installed or does not support the version check Format of BW-TCP server records: Offset Size Description (Table 0568) 00h BYTE number of server records following 01h N DWORDs internet addresses of servers --------y-213F------------------------------- INT 21 - Trusted Access - NB.SYS - GET STATE AH = 3Fh BX = file handle for device "$$NB$$NB" CX = 0002h (size of state) DS:DX -> buffer for state record (see #0569) 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 #0811 at AH=59h) Program: Trusted Access is a security and access-control package by Lassen Software, Inc.; NB.SYS is a device driver to prevent the user from terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break SeeAlso: AH=40h"NB.SYS",AX=4101h Format of Trusted Access state record: Offset Size Description (Table 0569) 00h BYTE 00h off, 01h on 01h BYTE keys being disabled bit 0: Ctrl-Break bit 1: SysReq bit 2: Ctrl and Alt bit 3: Ctrl-Alt-Del bit 7: all keys (overrides other bits) ----------213F------------------------------- INT 21 U - IFSHLP.SYS - GET ENTRY POINT AH = 3Fh BX = file handle for device "IFS$HLP$" CX = 0008h (size of buffer in bytes) DS:DX -> buffer for entry point record (see #0570) 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 #0811 at AH=59h) Program: IFSHLP.SYS is a support driver for Microsoft Windows for Workgroups SeeAlso: AX=4402h"IFSHLP" Format of IFSHLP.SYS entry point record: Offset Size Description (Table 0570) 00h 4 BYTEs (call) signature 70h E9h 34h 37h signature must be 34h 37h 70h EFh if called via IOCTL 04h DWORD (ret) pointer to FAR call entry point (see #0571) (Table 0571) Call IFSHLP.SYS entry point with: STACK: WORD function number (00h-0Ch) 00h ??? 01h set ??? intercept 02h remove ??? intercept 03h ??? LPT2 04h ??? LPT1 05h ??? and remove ??? intercept 06h set ??? flag 07h clear ??? flag 08h get ??? flag word 09h ??? 0Ah ??? 0Bh ??? 0Ch get ??? ---if function 00h--- Return: AX = ??? (0024h seen) DX = resident code segment ---if function 01h--- STACK: DWORD new intercept address Return: AX = status 0000h successful 0001h failed (already set) DX = 0000h ---if function 02h--- Return: AX = status 0000h successful 0001h failed (not set) DX = 0000h ---if function 03h,04h--- STACK: WORD ??? Return: AX = 0000h DX = 0000h ---if function 05h--- ??? ---if function 06h--- Return: AX = 0001h and DX = 0000h if already set AX,DX unchanged if successful ---if function 07h--- Return: AX = 0001h and DX = 0000h if not set AX,DX unchanged if successful ---if function 08h--- Return: DX = 0000h AX = flags (bit 0 set/cleared by functions 06h and 07h) ---if function 09h--- Return: AX = status 0000h successful 0001h failed (already called) ---if function 0Ah--- STACK: WORD ??? ??? ---if function 0Bh--- Return: AX = status 0000h successful 0001h failed (not set) ---if function 0Ch--- Return: AX = 0000h ES:BX -> ??? data ---if function > 0Ch--- Return: AX = 0001h DX = 0000h --------D-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 #0811 at 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-6.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 --------G-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 #0572) Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (05h,06h) (see #0811 at AH=59h) Note: results are retrieved by reading from the device SeeAlso: AH=3Fh"Turbo Debug" Format of Turbo Debugger hardware breakpoint commands: Offset Size Description (Table 0572) 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 (see #0573) 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 (see #0573) 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 (Table 0573) Values for Turbo Debugger address/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 inclusive range 08h outside specified range --------N-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 #0811 at 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 v2.1+ uses a new configuration method, but allows the installation of IPCUST.SYS for backward compatibility with other software which must read the PC/TCP configuration SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST" --------y-2140------------------------------- INT 21 U - Trusted Access - NB.SYS - SET STATE AH = 40h BX = handle for character device "$$NB$$NB" DS:DX -> state record (see #0569) CX ignored Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (05h,06h) (see #0811 at AH=59h) Program: Trusted Access is a security and access-control package by Lassen Software, Inc.; NB.SYS is a device driver to prevent the user from terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break SeeAlso: AH=3Fh"NB.SYS" --------j-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 Program: FARTBELL is a joke program by Guenther Thiele which makes various noises when programs output a bell SeeAlso: AX=4001h --------j-214001BX0002----------------------- INT 21 - FARTBELL.EXE - FORCE NOISE AX = 4001h BX = 0002h CX = 0000h DS:DX = 0000h:0000h Program: FARTBELL is a joke program by Guenther Thiele which makes various noises when programs output a bell SeeAlso: AX=4000h --------D-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 #0811 at 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 DR-DOS 5.0-6.0 returns error code 03h if invoked via AX=5D00h 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 BUG: DR-DOS 3.41 crashes if called via AX=5D00h SeeAlso: AH=13h,AX=4301h,AX=4380h,AX=5D00h,AH=60h,AH=71h,AX=F244h SeeAlso: INT 2F/AX=1113h --------y-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 SeeAlso: AH=3Fh"NB.SYS",INT 16/AX=FFA3h/BX=0000h --------D-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 #0811 at 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) BUG: using this method to grow a file from zero bytes to a very large size can corrupt the FAT in some versions of DOS; the file should first be grown from zero to one byte and then to the desired large size SeeAlso: AH=24h,INT 2F/AX=1228h --------v-214203----------------------------- INT 21 - VIRUS - "Shake" - INSTALLATION CHECK AX = 4203h Return: AX = 1234h if resident SeeAlso: AX=3DFFh,AX=4243h --------v-214243----------------------------- INT 21 - VIRUS - "Invader" - INSTALLATION CHECK AX = 4243h Return: AX = 5678h if resident SeeAlso: AX=4203h,AX=4B04h --------D-214300----------------------------- INT 21 - DOS 2+ - GET FILE ATTRIBUTES AX = 4300h DS:DX -> ASCIZ filename Return: CF clear if successful CX = file attributes (see #0574) AX = CX (DR-DOS 5.0) CF set on error AX = error code (01h,02h,03h,05h) (see #0811 at AH=59h) Notes: under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX under DR-DOS 3.41 and 5.0, attempts to change the subdirectory bit are simply ignored without an error BUG: Windows for Workgroups returns error code 05h (access denied) instead of error code 02h (file not found) when attempting to get the attributes of a nonexistent file. This causes open() with O_CREAT and fopen() with the "w" mode to fail in Borland C++. SeeAlso: AX=4301h,AX=4310h,AH=71h,AH=B6h,INT 2F/AX=110Fh,INT 60/DI=0517h --------D-214301----------------------------- INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES AX = 4301h CX = new file attributes (see #0574) DS:DX -> ASCIZ filename Return: CF clear if successful AX destroyed CF set on error AX = error code (01h,02h,03h,05h) (see #0811 at 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) MS-DOS 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 DOS 5.0 SHARE will close the file if it is currently open in sharing- compatibility mode, otherwise a sharing violation critical error is generated if the file is currently open SeeAlso: AX=4300h,AX=4311h,AH=71h,INT 2F/AX=110Eh Bitfields for file attributes: Bit(s) Description (Table 0574) 7 shareable (Novell NetWare) 6 unused 5 archive 4 directory 3 volume label execute-only (Novell NetWare) 2 system 1 hidden 0 read-only --------D-214302----------------------------- INT 21 - DOS 7 (Chicago) - GET VOLUME INFORMATION AX = 4302h details not yet available SeeAlso: AH=71h,AH=72h --------O-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 (see #0575) 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+) this function is documented in DR-DOS 6.0 and corresponds to the "Get/Set File Attributes" function, subfunction 2, documented in Concurrent DOS. 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 Bitfields for DR-DOS file access rights: Bit(s) Description (Table 0575) 0 owner delete requires password 1 owner execution requires password (FlexOS) 2 owner write requires password 3 owner read requires password 4 group delete requires password 5 group execution requires password (FlexOS) 6 group write requires password 7 group read requires password 8 world delete requires password 9 world execution requires password (FlexOS) 10 world write requires password 11 world read requires password --------O-214303----------------------------- INT 21 - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD AX = 4303h CX = access rights bits 11-0: access rights (see #0575) 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 Notes: if the file is already protected, the old password must be added after the pathname, separated by a ";" this function is documented in DR-DOS 6.0 and corresponds to the "Get/Set File Attributes" function, subfunction 3, documented in Concurrent DOS. SeeAlso: AH=0Fh,AH=17h,AX=4302h"DR-DOS",AX=4305h,AX=4454h --------O-214304----------------------------- INT 21 U - DR-DOS 5.0-6.0 internal - GET ENCRYPTED PASSWORD AX = 4304h DS:DX -> ASCIZ filename ??? Return: CF clear if successful CX = AX = 0000h if no password assigned to file CF set on error AX = error code (see #0811 at AH=59h) Note: this function is only supported by DR-DOS 5.0 and 6.0 and DRMDOS 5.1 SeeAlso: AX=4303h,AX=4305h --------O-214305----------------------------- INT 21 U - DR-DOS 5.0-6.0 internal - SET EXTENDED FILE ATTRIBUTES AX = 4305h DS:DX -> ASCIZ filename ??? Return: CF clear if successful CF set on error AX = error code (see #0811 at AH=59h) Desc: this function allows the extended attributes, and optionally the encrypted password, of a file to be set. Note: this function is only supported by DR-DOS 5.0 and 6.0 and DRMDOS 5.1 SeeAlso: AX=4304h,AX=4311h --------O-214306----------------------------- INT 21 - DR-DOS 6.0 - GET FILE OWNER AX = 4306h DS:DX -> ASCIZ filename Return: CF clear if successful AX = CX = value set with AX=4307h CF set on error AX = error code (see #0811 at AH=59h) SeeAlso: AX=4307h --------O-214307----------------------------- INT 21 - DR-DOS 6.0 - SET FILE OWNER AX = 4307h CX = ??? (owner identification number?) DS:DX -> ASCIZ filename Return: CF clear if successful CF set on error AX = error code (see #0811 at AH=59h) SeeAlso: AX=4306h --------N-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 #0576) CF set on error AX = error code (01h,02h,03h,05h) (see #0811 at 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 --------N-214311----------------------------- INT 21 - Banyan VINES 2.1+ - SET EXTENDED FILE ATTRIBUTES AX = 4311h CH = new attributes (see #0576) DS:DX -> ASCIZ filename Return: CF clear if successful CF set on error AX = error code (01h,02h,03h,05h) (see #0811 at AH=59h) Note: the filename may be a directory but must be on a VINES file service SeeAlso: AX=4301h,AX=4305h,AX=4310h,INT 2F/AX=110Eh Bitfields for VINES extended file attributes: Bit(s) Description (Table 0576) 7 unused 6 shareable 5 execute-only 4-0 unused --------O-214380----------------------------- INT 21 - Novell DOS 7 - UNDELETE PENDING DELETE FILE AX = 4380h ??? Return: ??? SeeAlso: AH=41h,AX=4381h --------O-214381----------------------------- INT 21 - Novell DOS 7 - PURGE PENDING DELETE FILE AX = 4381h ??? Return: ??? SeeAlso: AH=41h,AX=4380h --------D-214400----------------------------- INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION AX = 4400h BX = handle Return: CF clear if successful DX = device information word (see #0577) AX destroyed CF set on error AX = error code (01h,05h,06h) (see #0811 at AH=59h) Notes: value in DH corresponds to high byte of device driver's attribute word if handle refers to a character device Novell NetWare reportedly does not return a drive number in bits 5-0 for a disk file SeeAlso: AX=4401h,INT 2F/AX=122Bh Bitfields for device information word: Bit(s) Description (Table 0577) 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 only) generate INT 24 if no disk space on write or read past end of file 7 clear (indicates file) 6 file has not been written 5-0 drive number (0 = A:) --------D-214401----------------------------- INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION AX = 4401h BX = handle (must refer to character device) DX = device information word (see #0577) (DH must be zero) Return: CF clear if successful CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4400h,INT 2F/AX=122Bh --------D-214402----------------------------- INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL AX = 4402h BX = file handle referencing character device CX = number of bytes to read DS:DX -> buffer Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at 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 --------N-214402----------------------------- INT 21 - Network Driver Interface Specification (NDIS) 2.0.1 - PROTOCOL MANAGER AX = 4402h BX = file handle for device "PROTMAN$" CX = 000Eh (size of request block) DS:DX -> request block (see #0578,#0579,#0580,#0581,#0582,#0586,#0587) Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4402h"FTPSOFT" Format of NDIS request block for GetProtocolManagerInfo: Offset Size Description (Table 0578) 00h WORD 01h 02h WORD returned status (see #0588) 04h DWORD returned pointer to structure representing parsed user config 08h DWORD unused 0Ch WORD returned BCD version of NDIS on which Protocol Manager is based SeeAlso: #0579,#0580,#0581,#0582,#0583,#0584,#0585,#0586,#0587 Format of NDIS request block for RegisterModule: Offset Size Description (Table 0579) 00h WORD 02h 02h WORD returned status (see #0588) 04h DWORD pointer to module's common characteristics table (see #0589) 08h DWORD pointer to list of modules to which the module is to be bound 0Ch WORD unused SeeAlso: #0578,#0580,#0581,#0582,#0583,#0584,#0585,#0586,#0587 Format of NDIS request block for BindAndStart: Offset Size Description (Table 0580) 00h WORD 03h 02h WORD returned status (see #0588) 04h DWORD caller's virtual address in FailingModules structure 08h DWORD unused 0Ch WORD unused SeeAlso: #0578,#0579,#0581,#0582,#0583,#0584,#0585,#0586,#0587 Format of NDIS request block for GetProtocolManagerLinkage: Offset Size Description (Table 0581) 00h WORD 04h 02h WORD returned status (see #0588) 04h DWORD returned dispatch point 08h DWORD unused 0Ch WORD returned protocol manager DS Note: the dispatch point may be called as follows instead of using this IOCTL STACK: WORD protocol manager DS DWORD pointer to request block Return: AX = returned status STACK popped SeeAlso: #0578,#0579,#0580,#0582,#0583,#0584,#0585,#0586,#0587 Format of NDIS request block for GetProtocolIniPath: Offset Size Description (Table 0582) 00h WORD 05h 02h WORD returned status (see #0588) 04h DWORD pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI 08h DWORD unused 0Ch WORD buffer length SeeAlso: #0578,#0579,#0580,#0581,#0583,#0584,#0585,#0586,#0587 Format of NDIS request block for RegisterProtocolManagerInfo: Offset Size Description (Table 0583) 00h WORD 06h 02h WORD returned status (see #0588) 04h DWORD pointer to structure containing parsed user config file 08h DWORD unused 0Ch WORD length of structure SeeAlso: #0578,#0579,#0580,#0581,#0582,#0584,#0585,#0586,#0587 Format of NDIS request block for InitAndRegister: Offset Size Description (Table 0584) 00h WORD 07h 02h WORD returned status (see #0588) 04h DWORD unused 08h DWORD poitner to ASCIZ name of the module to be prebind initialized 0Ch WORD unused SeeAlso: #0578,#0579,#0580,#0581,#0582,#0583,#0585,#0586,#0587 Format of NDIS request block for UnbindAndStop: Offset Size Description (Table 0585) 00h WORD 08h 02h WORD returned status (see #0588) 04h DWORD failing modules as for BindAndStart 08h DWORD if not 0000h:0000h, pointer to ASCIZ name of module to unbind if 0000h:0000h, terminate a set of previously dynamically bound protocol modules 0Ch WORD unused SeeAlso: #0578,#0579,#0580,#0581,#0582,#0583,#0584,#0586,#0587 Format of NDIS request block for BindStatus: Offset Size Description (Table 0586) 00h WORD 09h 02h WORD returned status (see #0588) 04h DWORD must be 0000h:0000h on return, points to root tree 08h DWORD 0000h:0000h 0Ch WORD unused under DOS SeeAlso: #0578,#0579,#0580,#0581,#0582,#0583,#0584,#0585,#0587 Format of NDIS request block for RegisterStatus: Offset Size Description (Table 0587) 00h WORD 0Ah 02h WORD returned status (0000h, 0008h, 002Ch) (see #0588) 04h DWORD 0000h:0000h 08h DWORD pointer to 16-byte ASCIZ module name 0Ch WORD 0000h Note: not supported by the 10NET v5.0 PROTMAN$ driver SeeAlso: #0578,#0579,#0580,#0581,#0582,#0583,#0584,#0585,#0586 (Table 0588) Values for NDIS status code: 0000h success 0001h wait for release--protocol has retained control of the data buffer 0002h request queued 0003h frame not recognized 0004h frame rejected 0005h frame should be forwarded 0006h out of resource 0007h invalid parameter 0008h invalid function 0009h not supported 000Ah hardware error 000Bh transmit error 000Ch unrecognized destination 000Dh buffer too small 0020h already started 0021h binding incomplete 0022h driver not initialized 0023h hardware not found 0024h hardware failure 0025h configuration failure 0026h interrupt conflict 0027h MAC incompatible 0028h initialization failed 0029h no binding 002Ah network may be disconnected 002Bh incompatible OS version 002Ch already registered 002Dh path not found 002Eh insufficient memory 002Fh info not found 00FFh general failure F000h-FFFFh reserved for vendor-specific codes, treated as general failure Format of NDIS common characteristics table: Offset Size Description (Table 0589) 00h WORD size of table in bytes 02h BYTE NDIS major version 03h BYTE NDIS minor version 04h WORD reserved 06h BYTE module major version 07h BYTE module minor version 08h DWORD module function flag bits bit 0: binding at upper boundary supported bit 1: binding at lower boundary supported bit 2: dynamically bound bits 3-31 reserved, must be 0 0Ch 16 BYTEs ASCIZ module name 1Ch BYTE upper boundary protocol level (see #0590) 1Dh BYTE upper boundary interface type for MACs: 1 = MAC for data links and transports: to be defined for session: 1 = NCB any level: 0 = private (ISV-defined) 1Eh BYTE lower boundary protocol level (see #0590) 1Fh BYTE lower boundary interface type same as offset 1Dh 20h WORD module ID filled in by protocol manager 22h WORD module DS 24h DWORD system request entry point 28h DWORD pointer to service-specific characteristics (see #0592,#0594) 0000h:0000h if none 2Ch DWORD pointer to service-specific status, or 0000h:0000h if none 30h DWORD pointer to upper dispatch table (see #0591) 0000h:0000h if none 34h DWORD pointer to lower dispatch table (see #0591) 0000h:0000h if none 38h 2 DWORDs reserved, must be 0 Note: for compatibility with NDIS 1.x.x, a major version of 00h is interpreted as 01h (Table 0590) Values for NDIS boundary protocol level: 00h physical 01h Media Access Control 02h Data link 03h network 04h transport 05h session FFh not specified Format of NDIS dispatch table: Offset Size Description (Table 0591) 00h DWORD -> common characteristics table (see #0589) 04h 4 BYTEs ??? 08h DWORD -> ??? function (called with 12 bytes of stack arguments) 0Ch DWORD -> ??? function (called with 10 bytes of stack arguments) 10h DWORD -> ??? function (called with 16 bytes of stack arguments) 14h DWORD -> ??? function (called with 4 bytes of stack arguments) 18h DWORD -> ??? function (called with 18 bytes of stack arguments) 1Ch DWORD -> ??? function (called with 12 bytes of stack arguments) Format of MAC Service-Specific Characteristics Table: Offset Size Description (Table 0592) 00h WORD length of table in bytes 02h 16 BYTEs ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX", "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC", "HDLC", or "ISDN" 12h WORD length of station addresses in bytes 14h 16 BYTEs permanent station address 24h 16 BYTEs current station address 34h DWORD current functional adapter address (00000000h if none) 38h DWORD pointer to multicast address list 3Ch DWORD link speed in bits/sec 40h DWORD service flags (see #0593) 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 Bitfields for service flags: Bit(s) Description (Table 0593) 0 supports broadcast 1 supports multicast 2 supports functional/group addressing 3 supports promiscuous mode 4 station address software settable 5 statistics always current 6 supports InitiateDiagnostics 7 supports loopback 8 MAC does primarily ReceiveChain indications instead of ReceiveLookahead indications 9 supports IBM source routing 10 supports MAC reset 11 supports Open/Close adapter 12 supports interrupt request 13 supports source routing bridge 14 supports GDT virtual addresses (OS/2 version) 15 multiple TransferDatas allowed durign a single indication 16 MAC normally sets FrameSize = 0 in ReceiveLookahead 17-31 reserved, must be 0 Format of NetBIOS Service-Specific Characteristics Table: Offset Size Description (Table 0594) 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 (Table 0595) 00h WORD length of table in bytes 02h DWORD seconds since 0:00 1/1/70 when diagnostics last run (FFFFFFFFh = never) 06h DWORD MAC status bits (see #0596) 0Ah WORD current packet filter flags (see #0597) 0Ch DWORD pointer to media-specific status table or 0000h:0000h 10h DWORD seconds past 0:00 1/1/70 of last ClearStatistics 14h DWORD total frames received (FFFFFFFFh = not counted) 18h DWORD frames with CRC error (FFFFFFFFh = not counted) 1Ch DWORD total bytes received (FFFFFFFFh = not counted) 20h DWORD frames discarded--no buffer space (FFFFFFFFh = not counted) 24h DWORD multicast frames received (FFFFFFFFh = not counted) 28h DWORD broadcast frames received (FFFFFFFFh = not counted) 2Ch DWORD frames with errors (FFFFFFFFh = not counted) 30h DWORD overly large frames (FFFFFFFFh = not counted) 34h DWORD frames less than minimum size (FFFFFFFFh = not counted) 38h DWORD multicast bytes received (FFFFFFFFh = not counted) 3Ch DWORD broadcast bytes received (FFFFFFFFh = not counted) 40h DWORD frames discarded--hardware error (FFFFFFFFh = not counted) 44h DWORD total frames transmitted (FFFFFFFFh = not counted) 48h DWORD total bytes transmitted (FFFFFFFFh = not counted) 4Ch DWORD multicast frames transmitted (FFFFFFFFh = not counted) 50h DWORD broadcast frames transmitted (FFFFFFFFh = not counted) 54h DWORD broadcast bytes transmitted (FFFFFFFFh = not counted) 58h DWORD multicast bytes transmitted (FFFFFFFFh = not counted) 5Ch DWORD frames not transmitted--timeout (FFFFFFFFh = not counted) 60h DWORD frames not transmitted--hardware error (FFFFFFFFh = not countd) 64h N BYTEs vendor-specific info Bitfields for MAC status bits: Bit(s) Description (Table 0596) 0-2 operational status 000 hardware not installed 001 hardware failed startup diagnostics 010 hardware configuration problem 011 hardware fault 100 operating marginally due to soft faults 101 reserved 110 reserved 111 hardware fully operational 3 MAC bound 4 MAC open 5 diagnostics in progress 6-31 reserved Bitfields for packet filter flags: Bit(s) Description (Table 0597) 0 directed/multicast or group/functional 1 broadcast 2 promiscuous 3 all source routing 4-15 reserved, must be zero --------I-214402----------------------------- INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ??? AX = 4402h BX = handle for character device "GDMS" CX = number of bytes to read (>= 4) DS:DX -> buffer (see #0598) Return: CF set on error AX = error code (see #0811 at AH=59h) CF clear if successful AX = number of bytes read Format of System 36/38 emulator returned data: Offset Size Description (Table 0598) 00h 4 BYTEs ??? 04h DWORD pointer to ??? 08h 4 BYTEs ??? --------m-214402----------------------------- INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE AX = 4402h BX = handle for device "LA$TBYTE" CX = 0004h DS:DX -> DWORD to hold address of 39-byte table of ??? Return: CF set on error AX = error code (see #0811 at AH=59h) CF clear if successful AX = number of bytes read Program: LASTBYTE.SYS is part of the shareware "The Last Byte" memory management package by Key Software Products SeeAlso: AX=4402h"HIGHUMM" --------m-214402----------------------------- INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS AX = 4402h BX = handle for device "KSP$UMM" CX = 0004h DS:DX -> DWORD to hold entry point Return: CF set on error AX = error code (see #0811 at AH=59h) CF clear if successful AX = number of bytes read Program: HIGHUMM.SYS is part of the shareware "The Last Byte" memory management package by Key Software Products SeeAlso: AX=4402h"LASTBYTE" (Table 0599) Call HIGHUMM.SYS entry point with: AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h) DX = size in paragraphs Return: BX = segment number (if successful) DX = size of requested block/size of largest block AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h) DX = segment number of UMB AH = 02h request a bank-switched memory block DX = size in paragraphs Return: BX = segment number (if successful) DX = size of requested block/size of largest block AH = 03h release a bank-switched memory block DX = segment number AH = 04h transfer data to/from high memory DS:SI -> source ES:DI -> destination CX = length in bytes Note: enables bank-switched memory, does the copy, then disables bank-switched memory AH = 05h get a word from bank-switched memory ES:DI -> word to read Return: DX = word AH = 06h put a word to bank-switched memory ES:DI -> word to write DX = word AH = 07h put a byte to bank-switched memory ES:DI -> byte to write DL = byte AH = 08h enable bank-switched memory DS:SI -> 6-byte status save area AH = 09h disable bank-switched memory DS:SI -> 6-byte save area from enable call (AH=08h) AH = 0Ah assign name to UMB or high bank-switched block DX = segment number DS:SI -> 8-byte blank-padded name AH = 0Bh locate UMB block by name DS:SI -> 8-byte blank-padded name Return: BX = segment number (if successful) DX = size of block AH = 0Ch locate bank-switched block by name DS:SI -> 8-byte blank-padded name Return: BX = segment number (if successful) DX = size of block Return: AX = status code 0001h successful 0000h failed BL = error code 80h not implemented B0h insufficient memory, smaller block available B1h insufficient memory, no blocks available B2h invalid segment number Note: only functions 00h and 01h are always available; the remaining functions are only enabled if the proper commandline switch is given --------c-214402----------------------------- INT 21 - SMARTDRV.SYS v3.x only - IOCTL - GET CACHE STATUS AX = 4402h BX = file handle for device "SMARTAAR" CX = number of bytes to read (min 28h) DS:DX -> buffer for status record (see #0600) Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4403h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h Format of SMARTDRV status record: Offset Size Description (Table 0600) 00h BYTE write-through flag (always 01h) 01h BYTE writes should be buffered (always 00h) 02h BYTE cache enabled if 01h 03h BYTE driver type (01h extended memory, 02h expanded) 04h WORD clock ticks between cache flushes (currently unused) 06h BYTE cache contains locked tracks if nonzero 07h BYTE flush cache on INT 19 reboot if nonzero 08h BYTE cache full track writes if nonzero 09h BYTE double buffering (for VDS) state (00h off, 01h on, 02h dynamic) 0Ah DWORD original INT 13 vector 0Eh BYTE minor version number 0Fh BYTE major version number 10h WORD unused 12h WORD sectors read \ 14h WORD sectors already in cache > may be scaled rather than 16h WORD sectors already in track buffer / absolute counts 18h BYTE cache hit rate in percent 19h BYTE track buffer hit rate in percent 1Ah WORD total tracks in cache 1Ch WORD number of tracks in use 1Eh WORD number of locked tracks 20h WORD number of dirty tracks 22h WORD current cache size in 16K pages 24h WORD original (maximum) cache size in 16K pages 26h WORD minimum cache size in 16K pages 28h DWORD pointer to byte flag to increment for locking cache contents --------d-214402----------------------------- INT 21 - CD-ROM device driver - IOCTL INPUT AX = 4402h BX = file handle referencing character device for CD-ROM driver CX = number of bytes to read DS:DX -> control block (see #0602) Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at 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 (Table 0601) Values for CD-ROM data being requested: 00h device driver header address 01h drive head location 02h reserved 03h error statistics 04h audio channel info 05h raw drive bytes (uninterpreted and device-specific) 06h device status 07h sector size 08h volume size 09h media change status 0Ah audio disk info 0Bh audio track info 0Ch audio Q-Channel info 0Dh audio sub-channel info 0Eh UPC code 0Fh audio status info Format of CD-ROM control block: Offset Size Description (Table 0602) 00h BYTE data being requested (see #0601) ---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 (see #0603) ---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" ---function 0Fh--- ??? documentation not yet available 01h WORD pause status (0000h not paused, 0001h paused) 03h DWORD audio play start address 07h DWORD ??? audio play length or end address Bitfields for CD-ROM device parameters: Bit(s) Description (Table 0603) 0 door open 1 door unlocked 2 supports raw reading in addition to cooked 3 writable 4 can play audio/video tracks 5 supports interleaving 6 reserved 7 supports prefetch requests 8 supports audio channel control 9 supports Red Book addressing in addition to HSG 10 audio is playing 11 no disk in drive 12 supports R-W subchannels --------m-214402----------------------------- INT 21 - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT AX = 4402h BX = file handle for device "QEMM386$" CX = 0004h DS:DX -> DWORD buffer for API entry point Return: CF clear if successful buffer filled (see INT 67/AH=3Fh for entry point parameters) CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Note: Quarterdeck recently (June 1993) documented this function, but the documentation incorrectly states that it is only available for QEMM 6+ SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh --------Q-214402----------------------------- INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE AX = 4402h BX = file handle for device "HOOKROM$" CX = 0004h DS:DX -> DWORD buffer for address of hooked vector table (see #0604) Return: CF clear if successful DS:DX buffer filled CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4402h/SF=01h Format of HOOKROM.SYS hooked vector table entry: Offset Size Description (Table 0604) 00h 5 BYTEs FAR jump to actual interrupt handler (end of table if first byte is not EAh) 05h BYTE interrupt vector number --------d-214402----------------------------- INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE AX = 4402h BX = file handle for device "SCSIMGR$" CX = 0004h or 0005h (see notes) DS:DX -> buffer for result (see #0605), set to zeros before call Return: CF clear if successful AX = 0004h or 0005h (see notes) CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Note: the variant of the call requesting five bytes is an UNDOCUMENTED extension supported by Adaptec's ASPI2DOS.SYS, ASPI4DOS.SYS, and ASPI7DOS.SYS; if made of a host manager which does not support the variant, only four bytes will be returned. If the variant is supported, Adaptec's WINASPI.DLL assumes that the host manager is an "advanced" one which operates in either real or protected mode (and thus does not require a DPMI INT 31/AX=0301h call to be invoked from protected mode). Support of the five-byte variant also appears to imply that an advanced ASPI host manager uses no temporary storage space except the SRB and the stack, and that it is fully reentrant. if called with a standard request for four bytes, even Adaptec's advanced drivers return only the requested four bytes containing the ASPI entry point address the function address is called with the address of a SCSI Request Block on the stack and the caller must clean up the stack SeeAlso: AX=440Ch"ASPITAPE",INT 11/AH=FFh"WD7000" Format of ASPI IOCTL result: Offset Size Description (Table 0605) 00h DWORD function address 04h BYTE number of SCSI host adapters supported by host manager (Table 0606) Values for ASPI 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 06h get disk drive information Format of SCSI Request Block (64 bytes): Offset Size Description (Table 0607) 00h BYTE request number (see #0606) 01h BYTE request status (see #0608) 02h BYTE host adapter ID 03h BYTE request flags (see #0609) 04h DWORD reserved ---request 00h--- 08h BYTE (return) number of host adapters 09h BYTE (return) target adapter ID 0Ah 16 BYTEs (return) SCSI manager ID 1Ah 16 BYTEs (return) host adapter ID 2Ah 16 BYTEs (return) host adapter-unique parameters ---request 01h--- 08h BYTE target ID 09h BYTE logical unit number 0Ah BYTE (return) device type (see #0612) ---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 (return) host adapter status (see #0607) 19h BYTE (return) target status (see #0611) 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, including sense data (20-24 bytes) ---request 03h--- 08h DWORD address of SRB to abort ---request 04h--- 08h BYTE target ID 09h BYTE logical unit number 0Ah 14 BYTEs reserved 18h BYTE (return) host adapter status (see #0610) 19h BYTE (return) target status (see #0611) 1Ah DWORD post routine address 1Eh 34 BYTEs workspace ---request 05h--- 08h 16 BYTEs host adapter-unique parameters ---request 06h--- 08h BYTE target ID 09h BYTE logical unit number 0Ah BYTE disk drive flags 0Bh BYTE INT 13h drive number 0Ch BYTE preferred head number translation 0Dh BYTE preferred sector size translation 0Eh 10 BYTEs reserved (Table 0608) Values for ASPI request status: 00h not done yet 01h completed successfully 02h aborted by host 04h SCSI I/O error 80h invalid 81h no adapter 82h no device attached else status Bitfields for ASPI request flags: Bit(s) Description (Table 0609) 0 posting enabled 1 linking enabled 2 direction 3 transfer from SCSI target to host 4 transfer from host to SCSI target Note: no data is transferred if both bits 3 and 4 are set (Table 0610) Values for host adapter status: 00h no error detected 11h select timeout 12h data overrun 13h bus error 14h bus failure (Table 0611) Values for target status: 00h no status 02h sense data stored in SRB 08h target busy 18h reservation error (Table 0612) Values for device type: 00h disk drive 01h tape drive (streamer) 02h printer 03h processor 04h WORM drive 05h CD-ROM drive 06h scanner 07h optical drive 08h autochanger 09h communications device (Table 0613) Values for disk drive flags: 00h no INT 13 access 01h INT 13 with DOS access 02h INT 13 without DOS access 03h invalid flags Format of CCB: Offset Size Description (Table 0614) 00h BYTE command code (see #0615) 01h BYTE flags bits 4-0: vary by function bits 7-5: logical unit number 02h BYTE "adr_1" 03h BYTE "adr_0" 04h BYTE length 05h BYTE control ... 06h/0Ah 14 BYTEs buffer for sense data (see #0616) (Table 0615) Values for CCB command code: 00h test unit ready 01h rewind 03h request sense data 05h get block size limits 08h Group 0 read 0Ah Group 0 write 10h write file marks 11h SCSI Space (set position?) 12h SCSI Inquire 15h set mode information 16h reserve SCSI device 17h release SCSI device 19h erase 1Ah request mode information 1Bh load/unload media 1Dh request target self-check 24h set window parameters 25h get window parameters 28h Group 1 read 2Ah Group 1 write 31h document feeder control 34h get scan data status ---vendor-specific commands--- D3h get document feeder status D4h set document feeder mode Format of sense data: Offset Size Description (Table 0616) 00h BYTE error code (bit 7 set if valid) 01h BYTE segment number 02h BYTE sense key bit 6: EOM bit 5: ILI bits 0-3: sense key (see #0617) 03h 4 BYTEs information bytes 07h BYTE additional sense length (0Ah) 08h 4 BYTEs command-specific information 0Ch BYTE additional sense code 0Dh BYTE additional sense code qualifier 0Eh BYTE field replaceable unit code 0Fh 3 BYTEs sense key specific bytes (Table 0617) Values for sense key: 00h no sense data 02h SCSI unit not ready 03h media error 04h unrecoverable hardware error 05h illegal parameter in CDB 06h target has been reset 0Bh target aborted command --------m-214402----------------------------- INT 21 U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE AX = 4402h BX = file handle for device "386MAX$$" CX = number of bytes to read DS:DX -> BYTE 03h followed by 386MAX state buffer (see #0618) Return: CF clear if successful buffer at DS:DX+1 filled AX = number of bytes actually copied CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Notes: if the value given in CX is less than the size of the state record (5Ah for v6.01, 66h for v7.00), only a partial state record will be returned the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 ("386MAX$$" did not exist yet, use "QMMXXXX0" and then "EMMXXXX0" instead) and 56h bytes for v5.11. to invoke 386MAX API functions, push DX onto the stack, load DX with the word at offset 25h in the returned state, load all other registers as needed for the desired function, and execute an OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return if it is not otherwise modified by the API function. For safety, in case a function is not supported or 386MAX is not present, SP should be saved and restored around the API call. Windows 3.1 Standard mode, LAN Manager, and Windows for Workgroups all use the 386MAX API; LAN Manager and Windows for Workgroups reportedly make some calls incorrectly SeeAlso: AX=4403h/SF=03h"386MAX",INT 67/AH=3Fh Format of 386MAX v6.01+ state: Offset Size Description (Table 0618) -1 BYTE (call) 03h 00h 6 BYTEs signature "386MAX" 06h 4 BYTEs version string "N;NN" or "N.NN" (i.e. "6;01" for v6.01) (';' by default; apparently changed to a period when 386MAX has linked high RAM into DOS's memory chain) 0Ah WORD segment of low-memory portion of 386MAX.SYS 0Ch 2 BYTEs ??? 0Eh WORD segment of ??? memory block or 0000h 10h WORD bit flags 1 (see #0619) 12h WORD starting address of video memory in KB 14h 2 BYTEs ??? 16h WORD total high DOS memory in KB 18h 2 BYTEs ??? 1Ah WORD available shared memory in KB 1Ch WORD KBytes extended memory used by 386MAX 1Eh 2 BYTEs ??? 20h WORD total extended memory in KB 22h WORD IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions 24h WORD IO port to write (OUT DX,AL) to invoke 386MAX API functions 26h WORD ??? (depends on DOS version) 28h WORD size of ??? in paragraphs 2Ah DWORD machine type (see #0627) 2Eh DWORD -> first DOS memory control block 32h WORD system configuration flags (see #0620) 34h WORD debugging flags 1 (see #0621) 36h WORD debugging flags 2 (see #0622) 38h 2 BYTEs ??? 3Ah WORD segment of first MCB in high memory chain 3Ch WORD feature flags 1 (see #0624) 3Eh WORD feature flags 2 (see #0625) 40h WORD feature flags 3 (see #0626) 42h WORD segment of first 386MAX control block??? (see #0628) 44h WORD amount of memory to report available on INT 15/AH=88h 46h 4 BYTEs ??? 4Ah WORD number of K at start of address space swapped with fast extended memory (SWAP= parameter) 4Ch 2 BYTEs ??? 4Eh WORD segment address of ??? 50h WORD debugging flags 3 (see #0623) 52h DWORD old INT 21h 56h DWORD pointer to 386MAX's EMS (INT 67h) handler ---386MAX v7.00--- 5Ah DWORD KB of extended memory managed by 386MAX 5Eh DWORD bytes of extended memory (EXT= parameter) 62h 4 BYTEs ??? Bitfields for 386MAX bit flags 1: Bit(s) Description (Table 0619) 1 ??? 2 allow A20 to be enabled/disabled??? 3 ??? (cleared by calling INT 67 functions or starting MSWindows) 4 high RAM present??? 5 386MAX in AUTO mode 6 386MAX enabled 7 386MAX is providing EMS services 8 ??? (affects API function 08h) 9 A20 gate closed (A20 disabled) (see INT 15/AX=2402h) 10 Weitek support enabled 11 ??? 12 ROMs not shadowed??? 13 QPMS has been used 14 ??? 15 ??? Bitfields for 386MAX system configuration flags: Bit(s) Description (Table 0620) 1 ROM compressed??? 3 ??? 5 386MAX loaded into high memory 6 Microchannel bus 7 Weitek math coprocessor detected 9 ??? (also generates INT 01 on ??? and INT 03 on ???) 11 PC/XT (thus only single 8259 interrupt controller present, DMA only in 1st megabyte, etc) 13 LMLTOP= specified 14 enable A20 control??? 15 ??? Bitfields for 386MAX debugging flags 1: Bit(s) Description (Table 0621) 0 DEBUG=LED 1 DEBUG=X67 2 DEBUG=INV 3 DEBUG=EMSPTED 4 DEBUG=JMP 5 DEBUG=CALL 6 DEBUG=HLT 7 DEBUG=PMR 8 DEBUG=CR3 9 DEBUG=CAPS or DEBUG=INT 10 DEBUG=RC 11 DEBUG=ROM 12 DEBUG=XM 13 DEBUG=SOR 14 DEBUG=XR 15 DEBUG=EMSERR (generate INT 01 on returning error from EMS call) Bitfields for 386MAX debugging flags 2: Bit(s) Description (Table 0622) 0 DEBUG=ROMSWAP 1 DEBUG=UNSHADOWROM 2 DEBUG=COMPROM 3 DEBUG=DPMIPHYS 4 DEBUG=ALLROM 5 DEBUG=VMS 6 DEBUG=XMS (generate INT 01 on XMS calls) 7 DEBUG=I06 8 DEBUG=VCPI 9 DEBUG=XDMA 10 DEBUG=X09 13 DEBUG=I67 (generate INT 01 on every INT 67 call) 14 DEBUG=EVM (generate INT 01 on entering V86 mode) 15 DEBUG=EMSSAVE or DEBUG=VDS Bitfields for 386MAX debugging flags 3: Bit(s) Description (Table 0623) 10 DEBUG=EPM 12 DEBUG=ABIOS 13 DEBUG=XMSPTED 14 DEBUG=TIME 15 DEBUG=SCRUB Bitfields for 386MAX feature flags 1: Bit(s) Description (Table 0624) 1 Weitek present 2 no DPMI services 3 NODMA 4 TERSE 5 NOROM 6 NOPARITY 8 NOFLEX (IGNOREFLEXFRAME) 11 don't create UMBs 12 don't backfill below video memory (NOLOW) 13 FRAME= specified 14 EXT= specified 15 NOEMS, allow prior expanded memory manager to provide EMS Bitfields for 386MAX feature flags 2: Bit(s) Description (Table 0625) 0 UNSHIFT specified (FORCEA20 disabled) 1 NOXRAM 2 NOSCSI specified 3 SCREEN specified 4 enabled EISADMA 5 slow DMA 6 RESETKEYB specified 7 ??? 9 TOP384 10 ??? 11 NOWARMBOOT 12 USE= specified 13 ROM= specified Bitfields for 386MAX feature flags 3: Bit(s) Description (Table 0626) 0 Windows3 support enabled 1 SHADOWROM 2 don't compress ROM (NOCOMPROM) 3 ??? (related to PRGREG=) 4 ??? (related to PRGREG=) 5 SHADOWRAM 6 DOS4 specified 7 NOLOADHIGH 8 NOPULSE 11 FORCEA20 12 DMA buffer enabled 13 NOSCRUB 15 NOFRAME Bitfields for 386MAX machine type: Bit(s) Description (Table 0627) 12 Amstrad 13 Epson 14 Zenith Data Systems 15 "ASEM" 16 NEC 17 "HPRS" model codes 69h and 6Ah 18 Dell 19 "CA" 20 ITT (Xtra Business Systems/Alcatel) 21 Toshiba 5100 22 Olivetti 23 Quadram Quad386 (BIOS model FEh, submodel A6h) 24 Tandy??? 25 AST 386 26 INBOARD, ??? version 27 INBOARD, ??? version 28 INBOARD, ??? version 29 "HPRS" 30 Compaq 386 31 JET386 Format of 386MAX control block: Offset Size Description (Table 0628) 00h WORD segment of next block (FFFFh if last) 02h WORD segment of previous block (FFFFh if first) 04h 12 BYTEs filename 10h WORD resident size in paragraphs 12h WORD environment size??? 14h WORD real prsent environment size + 1 (0000h if ENVSAVE used) 16h 2 BYTEs ??? 18h DWORD initial size or SIZE=n in 386LOAD commandline 1Ch DWORD SIZE=-1 ??? 20h DWORD SIZE= ??? 24h BYTE PRGREG= if specified, else FFh 25h BYTE ENVREG= if specified, else FFh 26h BYTE FlexFrame (00h not present, 01h present) 27h 3 BYTEs ??? 2Ah BYTE GROUP= or 00h if not present 2Bh BYTE ??? 2Ch WORD PSP Format of 386MAX high memory info record: Offset Size Description (Table 0629) 00h WORD segment address of memory region 02h WORD size of memory region in paragraphs 04h BYTE type or flags??? 00h if locked out 02h if EMS page frame 04h if high RAM 42h if ROM 05h BYTE ??? Format of 386MAX ROM shadowing record: Offset Size Description (Table 0630) 00h WORD logical start segment of ROM??? (may be used by BlueMAX when it squeezes together the ROMs to make room) 02h WORD physical start segment of ROM 04h 2 BYTEs ??? 06h WORD size of shadowed ROM in paragraphs 08h 2 BYTEs ??? 0Ah WORD flags bit 15: shadowing enabled for this ROM??? bit 14: ??? bit 13: ??? bit 12: ??? bit 10: ??? (Table 0631) Values for 386MAX memory type: 00h unused by EMS 01h DOS 04h page frame overlapping ROM??? 80h high memory 84h page frame??? 87h video ROM??? Note: the type may be 00h (unused) if the 16K page is split among different uses (such as ROM and high RAM) (Table 0632) Call 386MAX API (via OUT DX,AL) with: STACK: WORD value for DX AH = 00h unused Return: AH = 84h (unsupported function) AH = 01h get high memory information ES:DI -> buffer for array of high memory info records (see #0629) Return: CX = number of records placed in buffer AH = 02h get shadowed ROM info ES:DI -> buffer for array of ROM shadowing records (see #0630) Return: CX = number of records placed in buffer AH = 03h get 386MAX state ES:DI -> 90-byte buffer for state (see #0618) Return: AH = 00h (successful) buffer filled AH = 04h get memory types??? ES:DI -> buffer for memory type info (array of bytes, one per 16K page) (see #0631) Return: CX = number of bytes placed in buffer AH = 05h get page table entries AL = A20 control (00h enable A20 first, 01h leave unchanged) CX = buffer size in bytes (0000h = enough for all memory from given start to end of memory managed by 386MAX) SI = first K to report (rounded down to 4K page) ES:DI -> buffer for returned page table entries Return: CX = number of bytes returned (four per 4K page) ES:DI buffer filled AH = 06h get memory speed info ES:DI -> buffer for memory speed records (see #0633) Return: AH = 00h (successful) CX = number of bytes placed in buffer Note: this function can take over a second to execute AH = 07h map/unmap multiple handle pages DX = EMS handle (on stack) STACK: DWORD -> EMS mapping record Return: AH = status (00h,80h,83h,8Ah,8Bh) Format of EMS mapping record: Offset Size Description 00h WORD function 0000h use physical page numbers 0001h use segment addresses 02h WORD EMS handle 04h WORD number of mapping entries following 06h 2N WORDs logical page number and physical page/segment logical page FFFFh means unmap physical page SeeAlso: INT 67/AH=50h AH = 08h "EMM2_GOREAL" check whether possible to disable 386MAX AL = ??? (00h or nonzero) Return: AH = status (00h OK, A4h not possible at this time) Note: if AL=00h, this function always returns success AH = 09h toggle Bit Flags 1 flags BX = bitmask of bit flags 1's flags to toggle (see #0619) Return: AH = 00h (successful) Note: enables A20 first AH = 0Ah toggle Debugging Flags 1 flags BX = bitmask of Debugging Flags 1's bits to toggle (see #0621) Return: AH = 00h (successful) Notes: enables A20 first does ??? if bit 3 on after specified bits are toggled AH = 0Bh toggle Debugging Flags 2 flags BX = bitmask of Debugging Flags 2's bits to toggle (see #0622) Return: AH = 00h (successful) Note: enables A20 first AH = 0Ch toggle feature flags 3 BX = bitmask of feature flags 3's bits to toggle (see #0626) Return: AH = 00h (successful) Note: enables A20 first AH = 0Dh specify 386MAX high-memory location BX = segment address of high-memory real-mode portion of 386MAX CX = current segment of real-mode stub??? Return: AH = status (00h successful) ??? AH = 0Eh CRT controller register virtualization AL = subfunction 00h allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h 01h trap accesses to CRTC I/O ports AH = 0Fh reboot system Return: never AH = 10h unused Return: AH = 84h (unsupported function) AH = 11h get high memory information ES:DI -> 96-byte buffer for high memory info Return: AH = 00h (successful) ES:DI buffer filled Notes: each byte in buffer contains bit flags for a 4K page in the A000h-FFFFh region bit 0: page is writeable bit 1: physical address same as linear address bit 2: EMS page frame bit 6: page is part of the QPMS window this function can take over a second to execute, because it does a 128K read for each page in an attempt to flush any RAM cache the system may have AH = 12h shadow RAM mapping AL = subfunction 00h unshadow ROMs (except page FFh if NOWARMBOOT set) 01h map shadow RAM into ROM regions??? Return: AH = 00h (successful) if AL=00h or 01h AH = 8Fh otherwise AH = 13h shadow RAM page protection AL = subfunction 00h set all shadowed ROM 4K pages to read-only 01h set all shadowed ROM 4K pages to read-write Return: AH = 00h (successful) if AL=00h or 01h AH = 8Fh otherwise AH = 14h get Programmable Option Select info??? ES:DI -> 54-byte buffer for POS data??? Return: AH = 00h if successful AH = A4h on error Note: the buffer consists of nine 6-byte fields; the first eight for slots 1-8, the last for the system board AH = 15h ??? ??? Return: ??? AH = 16h get 386MAX memory usage screen ES:DI -> buffer for memory info display CX = size of buffer in bytes Return: ES:DI buffer filled with '$'-terminated string (if large enough to hold entire usage screen) Note: the screen is 0303h bytes in v7.00 AH = 17h Windows 3 startup/termination AL = subfunction 00h Windows3 initializing DX (on stack) = Windows startup flags DI = Windows version number (major in upper byte) ES:BX = 0000h:0000h DS:SI = 0000h:0000h Return: CX = 0000h if OK for Windows to load <> 0 if Windows should not load ES:BX -> startup info structure DS:SI -> Virtual86 mode enable/disable callback 01h Windows3 terminating ES:BX -> ??? DX (on stack) = Windows exit flags Return: ??? AH = 18h QPMS (Qualitas Protected Memory Services) AL = subfunction 00h get QPMS configuration Return: BX = starting segment of QPMS memory window CX = number of 4K pages reserved for QPMS??? DX = number of 4K pages in QPMS window??? 01h map QPMS memory page??? BX = 4K page number within memory reserved for QPMS??? CL = 4K page number within QPMS memory window??? 02h mark all QPMS memory read-only 03h mark all QPMS memory read-write Return: AH = status (00h,8Ah,8Bh,8Fh) AH = 19h get linear address for physical address EDX = physical address (low word on stack) Return: AH = status 00h successful EDX = linear address at which physical address may be accessed 8Bh physical address currently not addressable Note: enables A20 first AH = 1Ah set page table entry EDX = new page table entry (low word on stack) ESI = linear address of page to map (bits 0-11 clear) Return: AH = status (00h,8Bh) Note: enables A20 first AH = 1Bh get ??? Return: AH = status BX = ??? CX = number of ??? EDX = physical address of ??? AH = 1Ch get original interrupt vector AL = interrupt vector (00h-7Fh) Return: AH = 00h (successful) EDX = original vector before 386MAX loaded (segment in high word, offset in low word) Note: no range checking is performed; requests for INTs 80h- FFh will return random values AH = 1Dh display string??? SI = ??? Return: AH = 00h (successful) ??? Note: this function appears to be broken in v7.00 AH = 1Eh get memory info ES:DI -> memory info (see #0634) Return: ??? AH = 1Fh get DPMI host information Return: AX = 0000h if successful BX = DPMI flags (see #1689 at INT 31/AX=0400h) CL = CPU type (02h = 80286, 03h = 80386, etc.) DX = DPMI ver supported (DH=major, DL=2-digit minor) SI = ??? ES???:DI -> ??? Note: NOP if NODPMI switch specified AH = 20h (v7.00) get ??? AL = index of ??? Return: EDX = ??? for specified ??? AH = 21h (v7.00) STACKS support AL = 00h get STACKS parameters Return: BX = ??? (0060h for v7.00) CX = number of stacks for hardware interrupts DX = size of each stack in bytes SI = ??? (low and high bytes are separate values) DI = ??? (low and high bytes are separate values) low byte = logical page number set by subfn 02h ES = ??? AL = 01h set ??? "EMM2_DSTKS" EBX = ??? ECX = ??? AL = 02h set ??? BL = logical page number for ??? (00h-03h) Return: AH = status (00h,8Ah) AH = 22h (v7.00) call ??? for every load module AL = which function to call 00h call ??? else call ???? Return: AH = 00h Note: if AL=00h, calls the protected-mode function pointed at by the DWORD at offset 22h from the start of each module installed by a LOAD= directive; if AL<>00h, it calls the function pointed at by the DWORD at offset 28h of the load module AH = 23h (v7.00) ??? AL = 00h set ??? BL = ??? Return: AH = 00h or unchanged (depending on ???) AL = 01h set ??? BL = ??? BH = ??? CX = ??? DX = ??? (on top of stack) Return: AH = status (00h if successful, 8Fh once table full) Note: this call adds one entry to an internal table on each call, until the table is full AL = 02h get ??? CX = size of buffer ES:DI -> buffer for ??? (60 bytes total data) Return: CX = number of bytes actually returned Note: returns the array storing the values set with AX=2301h Format of one entry in array: Offset Size Description 00h BYTE ??? (BL from subfn 01h) 01h WORD ??? (CX from subfn 01h) 03h BYTE ??? (BH from subfn 01h) 04h WORD ??? (DX from subfn 01h) AL = 03h set ??? name/path ES:DI -> buffer containing ASCIZ ??? AL = 04h get ??? ES:DI -> buffer for ASCIZ ??? Note: the ASCIZ string for subfunctions 03h and 04h does not appear to be used by 386MAX, and may serve merely for communication between two other Qualitas programs AH = 24h (v7.00) high memory control AL = 00h get high memory state Return: BX = current state 00h high memory removed from DOS memory chain 01h high memory included in DOS memory chain AL = 01h set high memory state BX = new state 00h high memory removed from DOS memory chain 01h high memory included in DOS memory chain else Return: ??? (error, but return varies according to ???) AH = 25h (v7.00) remove high RAM from DOS memory chain AH = 26h (v7.00) ??? BX = ??? CX = ??? SI = ??? DI = ??? Return: AH = status BX = ??? CX = ??? AH = 27h (v7.00) ??? AL = 00h get ??? Return: BX = number of paragraphs for ??? AL = 01h ??? BX = ??? ES??? = ??? AL = 02h ??? ??? AL = 03h ??? CX = ??? DX = ??? ES??? = ??? Return: ??? AH = 28h (v7.00) get ??? Return: AH = status (00h,8Fh) (see #2089 at INT 67/AH=40h) if AH=00h, CX = ??? DX = ??? AH = 29h (v7.00) get ??? Return: AX = ??? AH = 40h-5Dh EMS services (see INT 67/AH=40h etc) AH = DEh VCPI services (see INT 67/AX=DE00h etc) Return: AH = status (as for EMS INT 67 calls) 00h successful 80h internal error 81h hardware malfunction 83h invalid handle 84h undefined function 8Ah invalid logical page nuber 8Bh illegal physical page number 8Fh undefined subfunction A4h access denied etc. STACK popped (value placed in DX if no specific return value for DX) Format of 386MAX memory speed record: Offset Size Description (Table 0633) 00h DWORD page table entry for 4K page 04h WORD number of microticks (840ns units) required for REP LODSD of entire 4K page Format of 386MAX memory info [array]: Offset Size Description (Table 0634) 00h DWORD linear start address 04h DWORD size in bytes 08h WORD XMS handle (if next byte = 04h) ??? (if next byte = 05h) ??? (if next byte = 06h) ??? (if next byte = 13h) ??? (if next byte = 14h) ??? (if next byte = 15h) ??? (if next byte = 23h) ??? (if next byte = 24h) ??? (if next byte = 26h) else unused 0Ah BYTE type 00h = ???, 01h = VDISK, 02h = INT 15h extended memory, 03h = ??? extended, 04h = XMS handle's memory, 05h = ???, 06h = ???, 07h = ???, 08h = ???, 09h = ???, 0Ah = ???, 0Bh = ???, 11h = ???, 12h = ???, 14h = ???, 15h = ???, 19h = ???, 1Ah = ???, 1Bh = ???, 1Ch = ???, 1Dh = ???, 1Eh = ???, 1Fh = ???, 20h = ???, 21h = ???, 23h = ???, 24h = ???, 26h = ??? 0Bh BYTE ??? (00h for types 00h-03h, 07h-0Bh, 19h-21h; 80h for types 04h/13h-15h/23h-26h; ??? for type 05h) --------V-214402----------------------------- INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO AX = 4402h BX = file handle for device "PGS1600$" CX = 0018h (size of buffer) DS:DX -> configuration buffer (see #0635) 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 #0811 at AH=59h) Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600 display adapter, which provides a 1600x1200 monochrome display as well as one of two emulations, MDA or CGA. SeeAlso: AX=4403h"PGS1600" Format of PGS1600.DEV configuration information: Offset Size Description (Table 0635) 00h WORD version (high byte = major, low byte = minor) 02h WORD board initialisation mode 04h WORD board I/O address 03D0h CGA emulation 03B0h MDA emulation 0390h no emulation 0350h no emulation, alternate 06h WORD emulation buffer segment B800h CGA emulation B000h MDA emulation 0000h no emulation 08h WORD PG1600 graphics buffer segment 0Ah WORD number of bytes between consecutive graphic rows 0Ch WORD horizontal pixel size 0Eh WORD vertical pixel size 10h WORD horizontal dots per inch 12h WORD vertical dots per inch 14h WORD graphics buffer bits per pixel 16h WORD monitor bits per pixel --------N-214402----------------------------- INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER AX = 4402h BX = file handle referencing device "$IPCUST" CX, DS:DX ignored Return: CF clear if successful AX destroyed CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Notes: there are a total of 378h bytes of configuration data for IPCUST.SYS version 2.05. If less than the entire data is read or written, the next read/write continues where the previous one ended; this call and AX=4403h both reset the location at which the next operation starts to zero v2.1+ uses a new configuration method, but allows the installation of IPCUST.SYS for backward compatibility with other software which must read the PC/TCP configuration SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4403h"IPCUST" --------N-214402----------------------------- INT 21 - WORKGRP.SYS - GET API ENTRY POINT AX = 4402h BX = file handle for device "NET$HLP$" CX = 0008h DS:DX -> buffer for entry point record Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which permits communication with PCs running Windows for Workgroups or LAN Manager SeeAlso: AH=3Fh"WORKGRP.SYS" Format of WORKGRP.SYS entry point record: Offset Size Description (Table 0636) 00h WORD 3633h \ signature??? 02h WORD EF6Fh / 04h DWORD address of entry point Note: first four bytes of buffer must be 6Fh E9h 33h 36h on entry when using IOCTL rather than READ to get the entry point record (Table 0637) Call WORKGRP entry point with: STACK: WORD function number (0000h-0009h) Return: STACK unchanged (Table 0638) Call WORKGRP function 00h with: STACK: WORD 0000h (function "get ???") Return: DX:AX -> data table (Table 0639) Call WORKGRP function 01h with: STACK: WORD 0001h (function "hook ???") Return: STACK: DWORD pointer to ??? WORD 0001h (function number) (Table 0640) Call WORKGRP function 02h with: STACK: WORD 0002h (function "unhook ???") ??? Return: ??? (Table 0641) Call WORKGRP function 03h with: STACK: WORD 0003h (function "reenable printer port") WORD LPT port number Return: ??? (Table 0642) Call WORKGRP function 04h with: STACK: WORD 0004h (function "disable printer port") WORD LPT port number Return: ??? (Table 0643) Call WORKGRP function 05h with: STACK: WORD 0005h (function "???") ??? Return: ??? (Table 0644) Call WORKGRP function 06h with: STACK: WORD 0006h (function "???") Return: STACK unchanged AX = 0000h DX = 0000h (Table 0645) Call WORKGRP functions 07h-09h with: STACK: WORD 0007h-0009h (NOP functions) Return: STACK unchanged AX = 0001h DX = 0000h --------N-214402----------------------------- INT 21 - 10NET v5.0 - 10BEUI.DOS - API AX = 4402h BX = file handle referencing device "10BEUI$" DS:DX -> parameter record (see #0646) CX ignored Return: CF clear if successful AX destroyed CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4402h"10MEMMGR",INT 6F/AH=00h"10NET" Format of 10NET 10BEUI.DOS parameter record: Offset Size Description (Table 0646) 00h WORD 000Ah (function number???) 02h WORD ??? 04h DWORD pointer to buffer for ??? 08h 4 BYTEs ??? 0Ch WORD transfer size --------N-214402----------------------------- INT 21 - 10NET v5.0 - 10MEMMGR.SYS - API AX = 4402h BX = file handle referencing device "MEMMGR0$" DS:DX -> 6-byte buffer for interface info (see #0647) CX ignored Return: CF clear if successful AX destroyed CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4402h"10BEUI",INT 6F/AH=00h"10NET" Format of 10NET 10MEMMGR.SYS interface info: Offset Size Description (Table 0647) 00h DWORD address of entry point (see #0648) 04h WORD version (0500h for v5.00) (Table 0648) Call 10NET 10MEMMGR.SYS entry point with: AL = 01h ??? BX = ??? Return: CF clear if successful CF set on error AX = error code AL = 02h ??? ??? AL = 03h ??? ??? AL = 04h set/restore memory allocation strategy BX = subfunction 0000h set strategy 0001h restore strategy Return: CF clear if successful CF set on error (if function disabled) various registers destroyed AL = other Return: CF set AX = 0000h BL = 01h --------V-214402----------------------------- INT 21 - Compaq AG1024.SYS - RGDI - GET DRIVER LOCATION AX = 4402h BX = file handle for device "$$$$RGDI" CX = 0006h (size of returned data) DS:DX -> location record (see #0649) Return: CF clear if successful buffer filled CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter SeeAlso: AX=4403h"RGDI" Format of Compaq AG1024.SYS location record: Offset Size Description (Table 0649) 00h WORD signature 55AAh 02h WORD segment of ??? 04h WORD segment of device driver's code --------N-214402----------------------------- INT 21 - FTPSOFT.DOS v3.1 - GET ??? AX = 4402h BX = file handle for device "FTPSOFT$" CX = size of buffer DS:DX -> buffer for data (see #0650) Return: CF clear if successful buffer filled CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: FTPSOFT.DOS is a device driver for Protocol Manager support from FTP Software, Inc. SeeAlso: AH=3Fh"PC/TCP",AX=4402h"NDIS" Format of FTPSOFT.DOS data: Offset Size Description (Table 0650) 00h WORD (call) BA98h (if different, no data returned) 02h DWORD -> NDIS common characteristics table (see #0589 at AX=4402h"NDIS") 06h DWORD (call) -> new dispatch table (see #0591 at AX=4402h"NDIS") 0Ah DWORD -> 28-byte buffer for ??? data 0Eh DWORD ??? 12h DWORD -> FAR function to reset dispatch jump table to defaults 16h BYTE ??? Note: the addresses in the new dispatch table are copied into an internal jump table which may be reset by calling the function pointed at by offset 12h --------n-214402----------------------------- INT 21 U - PenDOS PENDEV.SYS - GET ENTRY POINTS AX = 4402h BX = file handle for device "$$PENDOS" or "$$PD_REG" CX = size of buffer (4 for $$PENDOS and a 4,8,12, or 16 for $$PD_REG) DS:DX -> buffer for entry point record (see #0651) Return: CF clear if successful buffer filled CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: A limited version of PenDOS by Communication Intelligence Corporation, which provides pen capability to keyboard-based programs, is bundled with IBM DOS 6.1 SeeAlso: AX=4403h"PENDEV.SYS" Format of PENDEV.SYS entry point record: Offset Size Description (Table 0651) 00h DWORD -> array of jumps 04h WORD offset of function to retrieve entry point (see #0652) 06h 2 BYTEs signature "Pe" 08h WORD offset of function to set entry point (see #0653) 0Ah 2 BYTEs signature "nD" 0Ch WORD offset of function to clear entry point (see #0654) 0Eh WORD signature "OS" (Table 0652) Call PENDEV.SYS function to retrieve entry point with: AX = index of entry point (0-9) Return: CF clear if successful DX:AX -> desired entry point CF set on error (AX out of range) (Table 0653) Call PENDEV.SYS function to set entry point with: AX = index of entry point (0-9) DX:SI -> new handler Return: CF clear if successful CF set on error (AX out of range) (Table 0654) Call PENDEV.SYS function to clear entry point with: AX = index of entry point (0-9) Return: CF clear if successful CF set on error (AX out of range) Note: resets the jump at the specified entry point to its default target, which simply returns --------N-214402----------------------------- INT 21 U - LAN Manager - TCPDRV.DOS - API AX = 4402h BX = file handle referencing device "TCPDRV$" CX = 0019h DS:DX -> buffer containing request block Return: CF clear if successful buffer filled CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: TCPDRV.DOS is the low-level device driver supporting LAN Manager's TCP/IP protocol stack Format of TCPDRV.DOS request block: Offset Size Description (Table 0655) 00h BYTE (call) function number 00h initialize ??? 06h get ??? 07h get ??? 01h BYTE (call) 00h (return) error code if error, unchanged if successful 02h WORD signature 4354h ('CT') ---function 00h--- 04h DWORD (call) pointer to ??? FAR function function is called with ES:BX -> device driver request used to invoke this function 08h 4 BYTEs ??? 0Ch DWORD (call) pointer to ??? record, WORD at offset 22h is read 10h DWORD (return) -> ??? buffer if 0000h:0000h on call ---function 06h--- 04h 4 BYTEs ??? 08h DWORD (return) pointer to ??? ---function 07h--- 04h DWORD (return) pointer to ??? record --------y-214402----------------------------- INT 21 U - PC Tools 9 CPRLOW.EXE - GET CODE AND DATA ADDRESSES AX = 4402h BX = file handle referencing device "RECLOWLD" DS:DX -> buffer for address list (see #0656) CX ignored Return: CF clear if successful buffer filled CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Format of CPRLOW address list: Offset Size Description (Table 0656) 00h WORD segment of CPRLOW code 02h WORD offset in code segment of ??? entry point (switches into protected mode) 04h WORD offset in code segment of jump array (see #0657) 06h WORD segment of copy of interrupt vector table at CPRLOW load time Note: neither the entry point nor the jump array is valid until after a CPR /LOAD, because CPR.EXE installs the code into CPRLOW at runtime. Format of CPRLOW jump array: Offset Size Description (Table 0657) 00h 3 BYTEs initialize CPRLOW interrupt hooks 03h 3 BYTEs reset timers and enable CPR (hotkey enable) 06h 3 BYTEs disable CPR (hotkey disable) 09h 3 BYTEs clear ??? flag, hotkey disable, and ??? 0Ch 3 BYTEs initialize delay loop counter (destroys AX,BX,CX,DX) 0Fh 3 BYTEs disable CPR completely (commandline /DISABLE) 12h 3 BYTEs enable ??? if CPR enabled by both cmdline and hotkey 15h 3 BYTEs enable CPR (commandline /ENABLE) --------m-214402----------------------------- INT 21 U - Novell DOS 7 EMM386.EXE - GET STATE RECORD??? AX = 4402h BX = file handle for device "EMMXXXX0" CX = 003Eh (size of state record) DS:DX -> buffer for state record (see #0658) Return: CF clear if successful buffer filled (see #2044 at INT 67/AH=3Fh) CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Format of Novell DOS 7 EMM386.EXE state record: Offset Size Description (Table 0658) 00h WORD signature EDC0h 02h 60 BYTEs ??? --------m-214402SF00------------------------- INT 21 U - Memory Managers - GET API ENTRY POINT AX = 4402h subfn 00h BX = file handle for device "EMMXXXX0" CX = 0006h (size of buffer in bytes) DS:DX -> buffer for API entry point record (see #0660) first byte must be 00h on entry Return: CF clear if successful buffer filled (see #2044 at INT 67/AH=3Fh) CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Notes: this function is supported by Microsoft EMM386.EXE v4.45+ and CEMM v5.10+, and is intended for use by MS Windows as it starts up if no other program has hooked INT 67, an alternate installation check for CEMM is testing for the string "COMPAQ EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67 handler's segment; if present, the word at offset 12h contains the offset of the API entry point SeeAlso: AX=4402h/SF=01h,AX=4402h/SF=02h,AX=4402h"EMM386",INT 67/AH=3Fh Format of memory manager API entry point record: Offset Size Description (Table 0659) 00h WORD ??? (0022h for CEMM 5.11, 0025h for MS EMM386 v4.45) 02h DWORD manager's private API entry point (see #0660,#2107 at INT 67/AX=FFA5h) (Table 0660) Call CEMM v5.10+ entry point with: AH = 00h get memory manager's state Return: AH = state bit 0: turned OFF bit 1: AUTO mode enabled AH = 01h set memory manager's state AL = new state (00h ON, 01h OFF, 02h AUTO) Return: CF clear if successful CF set on error AH = 02h Weitek coprocessor support AL = subfunction 00h get Weitek support state Return: AL = status bit 0: Weitek coprocessor is present bit 1: Weitek support is enabled 01h turn on Weitek support 02h turn off Weitek support Return: CF clear if successful CF set on error AH = error code (01h invalid subfunc, 02h no Weitek) AH = 05h get statistics ??? AH > 06h Return: CF set AH = 01h (invalid function) Notes: AH=03h,04h,06h are NOPs which return CF clear, presumably for backwards compatibility with earlier versions of CEMM in v5.11, AH=05h merely prints an error message (using INT 21/AH=09h) stating that a different version of CEMM is installed and it is therefore not possible to display the statistics --------m-214402SF01------------------------- INT 21 U - Memory Managers - GET EMM IMPORT STRUCTURE ADDRESS AX = 4402h subfn 01h BX = file handle for device "EMMXXXX0" CX = 0006h (size of buffer in bytes) DS:DX -> buffer for EMM import structure record (see #0661) first byte must be 01h on entry Return: CF clear if successful buffer filled (see also #2044 at INT 67/AH=3Fh) CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Notes: this function is supported by Microsoft EMM386.EXE v4.45+, QEMM-386 v6+, and CEMM v5.10+, and is intended for use by MS Windows as it starts up for QEMM-386, this call always returns an error if Windows3 support has been disabled with the NW3 switch SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 2F/AX=D201h/BX=5145h SeeAlso: INT 67/AH=3Fh Format of EMM import structure record: Offset Size Description (Table 0661) 00h DWORD physical address of EMM import structure (see #0662) 04h BYTE EMM import structure major version 05h BYTE EMM import structure minor version Note: version 1.00 contains only EMS information (Windows 3.0+) version 1.10 contains UMB/XMS/HMA/EMS information (Windows 3.1) version 1.11 is version 1.10 plus memory manager maker/product name SeeAlso: #2084 Format of Global EMM Import record: Offset Size Description (Table 0662) 00h BYTE bit flags bit 2: ??? bit 3: free EMM386 virtual HMA only if hma_page_table_paddr!=0 bit 4: no UMB??? 01h BYTE reserved (0) 02h WORD size of structure in bytes 04h WORD structure version 06h DWORD reserved 0Ah 384 BYTEs 64 EMS frame status records (see #0663), one per 16K of real-mode 1M address space 18Ah BYTE ??? (must be at least 3*number_of_EMS_frames+4) 18Bh BYTE number of UMB frame descriptors following 18Ch 4N DWORDs UMB frame descriptors each is 4 DWORDs giving physical page numbers for the four 4K pages of a 16K EMS frame (00000000h if non-UMB page) var BYTE number of EMS handle info records following 16N BYTEs EMS handle info records (see #0665) ---version 1.10+ --- DWORD realmode INT 67 vector (used by Windows to set breakpoints) DWORD physical address of HMA page table values BYTE number of free page entries following 2N DWORDs free page entries each is: DWORD physical page number DWORD number of consecutive physical pages BYTE number of XMS handle info records following 00h if memory manager does not emulate XMS or has real mode XMS code which can execute in the Windows environment 12N BYTEs XMS handle info records (see #0666) BYTE number of free UMB info records following 2N WORDs free UMB info records each is: WORD real mode start segment WORD size in paragraphs ---version 1.11--- 20 BYTEs blank-padded maker name 20 BYTEs blank-padded product name Format of EMS frame status record: Offset Size Description (Table 0663) 00h BYTE frame type (see #0664) 01h BYTE owner handle (00h/FFh = none) from frame including UMB index to UMB frame descriptors 02h WORD logical page for frame, 7FFFh if none, FFFFh if non-EMS frame 04h BYTE EMS physical page number (FFh for non-EMS = don't care???) 05h BYTE flags for non-EMS frames (00h for EMS frame) bits 0,1 for first 4K, bits 2,3 for second 4K, etc: 10: direct mapping (linear address = physical address) 01: UMB mapping Bitfields for EMS frame type: Bit(s) Description (Table 0664) 0 EMS frame 1 (if EMS frame) in standard 64K page frame 2 first 4K of frame is UMB 3 second 4K of frame is UMB 4 third 4K of frame is UMB 5 last 4K of frame is UMB Format of EMS handle info record: Offset Size Description (Table 0665) 00h BYTE handle number (00h = system handle) 01h BYTE flags bit 0: normal handle rather than system handle bit 2: ??? (set by some EMS managers) 02h 8 BYTEs EMS handle's name 0Ah WORD number of 16K pages for handle 0Ch DWORD physical address of page table entries forming page map Note: all values should be zero for the system handle if no large frame support is present Format of XMS handle info record: Offset Size Description (Table 0666) 00h WORD handle 02h WORD flags bit 0: handle usable by Windows (already in use when Windows started if clear) bit 1: reserved (0) 04h DWORD size in KB (may be zero, used only if flags bit 0 set) 08h DWORD physical address (only if flags bit 0 set) --------m-214402SF02------------------------- INT 21 U - Memory Managers - GET MEMORY MANAGER VERSION AX = 4402h subfn 02h BX = file handle for device "EMMXXXX0" CX = 0002h (size of buffer in bytes) DS:DX -> buffer for memory manager version (see #0667) first byte must be 02h on entry Return: CF clear if successful buffer filled CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Note: this function is supported by Microsoft EMM386.EXE v4.45+ and CEMM v5.10+, and is intended for use by MS Windows as it starts up SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 67/AH=3Fh Format of memory manager version: Offset Size Description (Table 0667) 00h BYTE major version 01h BYTE minor version (binary) --------m-214402----------------------------- INT 21 U - Microsoft EMM386.EXE v4.45 - GET MEMORY MANAGER INFORMATION AX = 4402h BX = file handle for device "EMMXXXX0" CX = size of buffer in bytes (varies, see below) DS:DX -> buffer for returned data (see #0668) first byte must be set on entry to indicate desired data Return: CF clear if successful buffer filled CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Notes: an error is returned if the number of bytes to be read does not match the number of bytes returned for the specified data item this function is part of the interface which allows MS Windows to cooperate with memory managers SeeAlso: AX=4402h/SF=00h,AX=4402h/SF=01h,AX=4402h/SF=02h,INT 67/AX=FFA5h Format of EMM386.EXE data buffer: Offset Size Description (Table 0668) 00h BYTE (call) function 03h get ??? 04h get ??? ---function 03h--- 00h WORD ??? 02h WORD ??? ---function 04h--- 00h WORD segment of UMB containing EMM386 code/data 02h WORD number of paragraphs of EMM386 code/data in UMB 04h WORD ??? ----------214402----------------------------- INT 21 U - IFSHLP.SYS - GET ENTRY POINT AX = 4402h BX = file handle for device "IFS$HLP$" CX = 0008h (size of buffer in bytes) DS:DX -> buffer for entry point record (see #0570 at AH=3Fh"IFSHLP") Return: CF clear if successful buffer filled CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AH=3Fh"IFSHLP" --------D-214403----------------------------- INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL AX = 4403h BX = file handle referencing character device CX = number of bytes to write DS:DX -> data to write Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at 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 --------c-214403----------------------------- INT 21 - SMARTDRV.SYS v3.x only - IOCTL - CACHE CONTROL AX = 4403h BX = handle for device "SMARTAAR" CX = number of bytes to write DS:DX -> SMARTDRV control block (see #0670) 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 #0811 at AH=59h) SeeAlso: AX=4402h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h (Table 0669) Values for SMARTDRV function code: 00h flush cache 01h flush and discard cache 02h disable caching (flushes and discards cache first) 03h enable caching 04h control write caching 05h set flushing tick count 06h lock cache contents 07h unlock cache contents 08h set flush-on-reboot flag 09h unused 0Ah control full-track caching 0Bh reduce cache size 0Ch increase cache size 0Dh set INT 13 chain address Format of SMARTDRV control block: Offset Size Description (Table 0670) 00h BYTE function code (see #0669) ---functions 00h-03h,06h,07h--- no additional fields ---function 04h--- 01h BYTE write caching control action 00h turn off write-through 01h turn on write-through 02h turn off write buffering (also flushes cache) 03h turn on write buffering (also flushes cache) ---function 05h--- 01h WORD number of timer ticks between cache flushes ---function 08h--- 01h BYTE new flush-on-reboot flag (00h off, 01h on) ---function 0Ah--- 01h BYTE full-track writes are 00h not cached 01h cached ---functions 0Bh,0Ch--- 01h WORD number of 16K pages by which to increase/reduce cache size ---function 0Dh--- 01h DWORD new address to which to chain on INT 13 Note: the previous address is not preserved --------d-214403----------------------------- INT 21 - CD-ROM device driver - IOCTL OUTPUT AX = 4403h BX = file handle referencing character device for CD-ROM driver CX = number of bytes to write DS:DX -> control block (see #0671) Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h Format of CR-ROM control block: Offset Size Description (Table 0671) 00h BYTE function code 00h eject disk 01h lock/unlock door 02h reset drive 03h control audio channel 04h write device control string 05h close tray ---functions 00h,02h,05h--- no further fields ---function 01h--- 01h BYTE lock function 00h unlock door 01h lock door ---function 03h--- 01h BYTE input channel (0-3) for output channel 0 02h BYTE volume for output channel 0 03h BYTE input channel (0-3) for output channel 1 04h BYTE volume for output channel 1 05h BYTE input channel (0-3) for output channel 2 06h BYTE volume for output channel 2 07h BYTE input channel (0-3) for output channel 3 08h BYTE volume for output channel 3 Note: output channels 0 and 1 are left and right, 2 and 3 are left prime and right prime; a volume of 00h is off ---function 04h--- 01h N BYTEs bytes to send directly to the CD-ROM drive without interpretation --------d-214403----------------------------- INT 21 - 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 #0672) Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4405h"ST-01",INT 78/AH=10h Format of SCSITAPE control block: Offset Size Description (Table 0672) 00h WORD command type 'F' Format (argument 1 = interleave, argument 2 = format type) 'E' Erase 'R' Rewind 'L' Load 'N' No Load 'S' Space (argument 1 = count, argument 2 = type) 'M' File Mark (argument 1 = count) 'A' Reassign 02h WORD argument 1 04h WORD argument 2 06h WORD segment of command buffer 08h WORD offset of command buffer 0Ah WORD length of command buffer --------E-214403----------------------------- INT 21 U - AI Architects - OS/x86??? - API AX = 4403h BX = handle for device "AIA_OS" CX = number of bytes to write (ignored) DS:DX -> 12-byte buffer, 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 #0811 at AH=59h) Notes: these functions are only available if the DOS extender was loaded as a device driver in CONFIG.SYS called by TKERNEL (a licensed version of AI Architects/Ergo OS/x86) SeeAlso: INT 2F/AX=FBA1h/BX=0081h,INT 2F/AX=FBA1h/BX=0082h Index: installation check;OS/x86|entry point;OS/x86|uninstall;OS/x86 Format of buffer on return: Offset Size Description (Table 0673) 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 --------V-214403----------------------------- INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION??? AX = 4403h BX = file handle for device "PGS1600$" CX = 0018h (size of buffer) DS:DX -> configuration buffer (see #0635 at AX=4402h"PGS1600") Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600 display adapter, which provides a 1600x1200 monochrome display as well as one of two emulations, MDA or CGA. SeeAlso: AX=4402h"PGS1600" --------N-214403----------------------------- INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER AX = 4403h BX = file handle referencing device "$IPCUST" CX, DS:DX ignored Return: CF clear if successful AX destroyed CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Notes: there are a total of 378h bytes of configuration data for IPCUST.SYS version 2.05. If less than the entire data is read or written, the next read/write continues where the previous one ended; this call and AX=4402h both reset the location at which the next operation starts to zero v2.1+ uses a new configuration method, but allows the installation of IPCUST.SYS for backward compatibility with other software which must read the PC/TCP configuration SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4402h"IPCUST" --------V-214403----------------------------- INT 21 - Compaq AG1024.SYS - CPQ_MGES - IOCTL OUTPUT AX = 4403h BX = file handle referencing device "CPQ_MGES" DS:DX -> request packet (see #0674) CX ignored Return: CF clear if successful AX destroyed data buffer filled (if applicable) first word of request packet set to number of bytes of data available (amount returned is smaller of this and requested amount) CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter SeeAlso: AX=4403h"RGDI" Format of Compaq AG1024.SYS request packet: Offset Size Description (Table 0674) 00h WORD function 0000h get ??? (26h bytes) 0001h get ??? (36h bytes) 0002h set ??? (same as returned by function 0001h) 0003h get ??? (6 bytes) 0004h get ??? 0005h get ??? 0006h get ??? (10h bytes) 0007h set ??? (same as returned by function 0006h) ---functions 00h-03h,06h,07h--- 02h WORD size of data buffer 04h DWORD -> buffer for function's data ---functions 04h,05h--- 02h WORD ??? 04h WORD size of data buffer 06h DWORD -> buffer to receive data --------V-214403----------------------------- INT 21 - Compaq AG1024.SYS - RGDI - IOCTL OUTPUT AX = 4403h BX = file handle referencing device "$$$$RGDI" DS:DX -> request packet (see #0675) CX ignored Return: CF clear if successful AX destroyed data buffer filled (if applicable) first word of request packet set to number of bytes of data available (amount returned is smaller of this and requested amount) CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter SeeAlso: AX=4402h"RGDI",AX=4403h"CPQ_MGES" Format of Compaq AG1024.SYS request packet: Offset Size Description (Table 0675) 00h WORD function 0000h get entry points 0001h get ??? 02h DWORD address of buffer for returned data --------m-214403SF01------------------------- INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX OFF AX = 4403h subfn 01h BX = handle for device "386MAX$$" DS:DX -> BYTE 01h CX ignored Return: DS:DX -> BYTE status (00h = successful) CF clear if successful AX destroyed CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Note: this function will fail if any EMS or UMBs are in use SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=05h --------m-214403SF02------------------------- INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX ON AX = 4403h subfn 02h BX = handle for device "386MAX$$" DS:DX -> BYTE 02h CX ignored Return: DS:DX -> BYTE status (00h = successful) CF clear if successful AX destroyed CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h --------m-214403SF03------------------------- INT 21 U - Qualitas 386MAX v6.01+ - SET STATE AX = 4403h subfn 03h BX = handle for device "386MAX$$" CX = number of bytes to copy (up to size of state buffer) DS:DX -> BYTE 03h followed by state buffer (see #0618 at AX=4402h"386MAX") Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at 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" --------m-214403SF05------------------------- INT 21 U - Qualitas 386MAX v7.00+ - LIMIT AUTOMATIC ACTIVATION TO STD EMS CALLS AX = 4403h subfn 05h BX = handle for device "386MAX$$" DS:DX -> BYTE 05h CX ignored Return: CF clear if successful AX destroyed CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Desc: specifies that 386MAX will only shift from AUTO to ON mode on standard EMS calls INT 67/AH=40h-5Dh SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=06h --------m-214403SF06------------------------- INT 21 U - Qualitas 386MAX v7.00+ - ALLOW AUTOMATIC ACTIVATION ON ANY INT 67 AX = 4403h subfn 06h BX = handle for device "386MAX$$" DS:DX -> BYTE 06h CX ignored Return: CF clear if successful AX destroyed CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Desc: specified that 386MAX should shift from AUTO to ON mode on any INT 67 call other than INT 67/AH=3Fh SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h --------n-214403----------------------------- INT 21 U - PenDOS PENDEV.SYS - ??? AX = 4403h BX = file handle for device "$$PENDOS" or "$$PD_REG" CX = size of buffer DS:DX -> buffer containing ??? Return: CF clear if successful buffer filled CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: A limited version of PenDOS by Communication Intelligence Corporation, which provides pen capability to keyboard-based programs, is bundled with IBM DOS 6.1 Note: this call sets the WORD at offset 1Ah into the device driver request header used to call the driver to 0000h. SeeAlso: AX=4402h"PENDEV.SYS" --------D-214404----------------------------- INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL AX = 4404h BL = drive number (00h = default, 01h = A:, etc.) CX = number of bytes to read DS:DX -> buffer Return: CF clear if successful AX = number of bytes actually read CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Note: format of data is driver-specific SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh --------k-214404----------------------------- INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER AX = 4404h BL = drive number (00h = default, 01h = A:, etc.) CX = 0004h DS:DX -> DWORD buffer to receive device driver address 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 --------k-214404----------------------------- INT 21 - Stacker - GET STACVOL FILE SECTORS AX = 4404h BL = drive number (0 is current drive) CX = byte count (i.e., 200h = 1 sector) DS:DX -> buffer (see #0676) Return: Data Buffer contains the number of sectors requested from the STACVOL physical file for the drive specified. Format of Stacker buffer: Offset Size Description (Table 0676) 00h WORD 01CDh 02h WORD sector count 04h DWORD number of starting sector 08h DWORD far pointer to Data Buffer --------k-214404----------------------------- INT 21 - DUBLDISK.SYS v2.6 - GET INFO AX = 4404h BL = drive number of DoubleDisk drive (00h = default, 01h = A:, etc.) CX = number of bytes (000Ah-0014h, call ignored otherwise) DS:DX -> data record (see #0677) Return: CF clear if successful AX = number of bytes read CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: DUBLDISK.SYS is the device driver portion of DoubleDisk, a disk expander by Vertisoft Systems, Inc. Note: the installation check for v2.6 consists of scanning memory for the signature "FAT 2.6 byte:", which is immediately followed by a data table (see #0678) BUG: VOPT (a disk optimizer by Golden Bow Software) assumes that any driver which returns the "correct" number of bytes when the first word of the buffer for the data record contains the signature value 4444h is DoubleDisk; a workaround is for the non-DoubleDisk driver to return no data if the signature is present SeeAlso: AX=440Dh Index: installation check;DUBLDISK.SYS Format of DUBLDISK data record: Offset Size Description (Table 0677) 00h WORD (call) signature 4444h 02h BYTE (call) function 00h ??? 01h ??? ---function 00h--- 02h BYTE (return) ??? 03h BYTE (return) ??? ---function 01h--- 02h WORD (return) 4444h 04h WORD allocation unit size??? 06h WORD ??? 08h WORD ??? 0Ah BYTE ??? Format of DUBLDISK signature data table: Offset Size Description (Table 0678) 00h 5 BYTEs ??? 05h BYTE first drive number 06h BYTE number of drives 07h ??? --------k-214404----------------------------- INT 21 - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES AX = 4404h BL = drive number (00h = default, 01h = A:, etc) CX = 000Ah (size of DSPACKET structure) DS:DX -> DSPACKET structure (see #0679) Return: CF clear if IOCTL successful -- check DSPACKET for actual status AX = number of bytes actually transferred CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h Format of DoubleSpace DSPACKET structure: Offset Size Description (Table 0679) 00h WORD signature 444Dh ("DM") 02h BYTE command code 46h ('F') flush internal caches 49h ('I') flush and invalidate internal caches 03h WORD result code (return) 4F4Bh ("OK") if successful, else unchanged 05h 5 BYTEs padding --------k-214404----------------------------- INT 21 - DBLSPACE.BIN v6.2 - IOCTL - GET ??? FOR SPECIFIED DRIVE AX = 4404h BL = drive number (00h = default, 01h = A:, etc) CX = size of DSPACKET structure (ignored in DOS 6.2) DS:DX -> DSPACKET structure (see #0680) Return: CF clear if IOCTL successful -- check DSPACKET for actual status AX = number of bytes actually transferred CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h Format of DoubleSpace DSPACKET structure: Offset Size Description (Table 0680) 00h WORD signature 444Dh ("DM") 02h BYTE command code 53h ('S') get ??? for specified drive 03h WORD result code (return) 4F4Bh ("OK") if successful, else unchanged 05h DWORD (return) pointer to 96-byte ??? data 09h DWORD (return) pointer to ??? data 0Dh 3 BYTEs reserved --------d-214404----------------------------- INT 21 U - xDISK v3.31 - CONFIGURE AX = 4404h BL = drive number (00h = default, 01h = A:, etc) CX = 0047h (length of version string) DS:DX -> 79-byte buffer for version string and ??? DS:0081h = commandline containing new switches for driver Return: CF clear if successful AX = number of bytes actually transferred CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio SeeAlso: AX=4405h"xDISK",INT 2F/AH=DDh/BX=7844h"xDISK" --------c-214404----------------------------- INT 21 - COMBI-disk v1.13 - GET DATA RECORD AX = 4404h BL = drive number (00h = default, 01h = A:, etc) CX = 0032h (length of data packet) DS:DX -> buffer for data packet (see #0681) Return: CF clear if successful AX = number of bytes actually transferred CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: COMBI-disk is a shareware combination cache and RAMdisk sharing a single pool of memory by Vadim V. Vlasov Note: the installation check consists of scanning the valid drives for one which returns a correctly-sized data packet with the proper signature in the first field SeeAlso: AX=4405h"COMBI" Index: installation check;COMBI-disk Format of COMBI-disk data packet: Offset Size Description (Table 0681) 00h 6 BYTEs ASCIZ signature "COMBI" 06h WORD version (high byte = major, low = decimal minor version) 08h BYTE current options (see below) 09h BYTE sectors per allocation block 0Ah WORD maximum buffer in KB 0Ch WORD current buffer in KB (less than max if XMS memory being lent) 0Eh WORD total number of allocation blocks 10h WORD current number of allocation blocks 12h WORD number of blocks being used by RAM disk 14h WORD number of blocks being used by cache or unused 16h WORD number of dirty cache blocks 18h WORD number of blocks which could not be written out due to errors 1Ah WORD total number of read requests 1Ch WORD total number of sectors read 1Eh WORD number of BIOS read requests (cache misses) 20h WORD number of sectors read via BIOS (cache misses) 22h WORD total number of write requests 24h WORD total number of sectors written 26h WORD number of BIOS write requests 28h WORD number of sectors written via BIOS 2Ah WORD number of RAM disk read requests 2Ch WORD number of sectors read from RAM disk 2Eh WORD number of RAM disk write requests 30h WORD number of sectors written to RAM disk --------d-214404----------------------------- INT 21 - SFS v1.00 - GET CONFIGURATION INFORMATION AX = 4404h BL = drive number (00h = default, 01h = A:, etc) CX = 001Ah (length of data packet) DS:DX -> buffer for data packet (see #0682) Return: CF clear if successful AX = number of bytes actually transferred CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: SFS (Secure FileSystem) is a shareware encrypting disk driver by Peter C. Gutmann SeeAlso: AX=4405h"SFS" Format of SFS data packet: Offset Size Description (Table 0682) 00h 4 BYTEs signature string "SFS1" 04h WORD SFS unit number (0-based) 06h WORD drive on which the SFS volume is mounted 08h DWORD sector offset of logical volume from start of physical volume 0 if logical volume = physical volume 0Ch WORD flag: 00h = no disk mounted, 01h = disk mounted 0Eh WORD flag: 00h read/write, 01h read-only 10h WORD quick-unmount hotkey (high byte = shift state, low = scan code) 12h WORD auto-unmount time in minutes, or 0000h if already expired, or FFFFh if not set 14h WORD time in minutes remaining before auto-unmount 16h WORD internal driver check code 0000h no error 0001h driver consistency check failed 0002h unit consistency check failed 18h WORD disk access mode 0000h BIOS 0001h IDE direct access 0002h SCSI direct access --------D-214405----------------------------- INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL AX = 4405h BL = drive number (00h = default, 01h = A:, etc) CX = number of bytes to write DS:DX -> data to write Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Note: format of data is driver-specific SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh --------d-214405----------------------------- INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS AX = 4405h BX = drive number (00h = default, 01h = A:, etc) CX = number of bytes to write DS:DX -> SCSIDISK control block (see also #0672 at AX=4403h"ST-01") Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4403h"ST-01" --------k-214405----------------------------- INT 21 U - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES AX = 4405h BL = drive number (00h = default, 01h = A:, etc) CX = 000Ah (size of DSPACKET structure) DS:DX -> DSPACKET structure (see #0683) Return: CF clear if IOCTL successful -- check DSPACKET for actual status AX = number of bytes actually transferred CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Note: this call is identical to the documented AX=4404h SeeAlso: AX=4404h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h Format of DoubleSpace DSPACKET structure: Offset Size Description (Table 0683) 00h WORD signature 444Dh ("DM") 02h BYTE command code 46h ('F') flush internal caches 49h ('I') flush and invalidate internal caches 03h WORD result code (return) 4F4Bh ("OK") if successful, else unchanged 05h 5 BYTEs padding --------d-214405----------------------------- INT 21 U - xDISK v3.31 - ??? AX = 4405h BL = drive number (00h = default, 01h = A:, etc) CX = number of bytes to write DS:DX -> buffer containing version string ??? Return: CF clear if successful AX = number of bytes actually transferred CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio SeeAlso: AX=4404h"xDISK",INT 2F/AH=DDh/BX=7844h"xDISK" --------d-214405----------------------------- INT 21 - COMBI-disk v1.13 - CONTROL COMBI-disk AX = 4405h BL = drive number (00h = default, 01h = A:, etc) for RAM disk CX = number of bytes to write DS:DX -> buffer containing command packet (see #0685) Return: CF clear if successful AX = number of bytes actually transferred CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) SeeAlso: AX=4404h"COMBI" (Table 0684) Values for COMBI-disk command code: 80h flush cache 81h change options byte 82h shrink memory 83h expand memory 84h get dirty block information 85h reset write errors 86h reset counters Format of COMBI-disk command packet: Offset Size Description (Table 0685) 00h WORD version 02h BYTE command code (see #0684) ---command code 80h--- no additional fields ---command code 81h--- 03h BYTE new options byte (see #0686) ---command code 82h--- 03h WORD number of KB to release ---command code 83h--- 03h WORD number of KB to expand ---command code 84h--- 03h DWORD -> buffer for block info (see #0687) ---command code 85h--- 03h DWORD block ID ---command code 86h--- 03h BYTE which counters to reset bit 0: hard disk read counts bit 1: hard disk write counts bit 2: RAM disk read/write counts Note: multiple commands may be placed in a single packet by stringing together as many command/argument pairs as desired Bitfields for COMBI-disk options byte: Bit(s) Description (Table 0686) 0 cache off 1 cache frozen 2 write caching enabled 3 delayed writing disabled 5 fix memory allocation (no XMS lending) 6 no 'sector not found' error Format of COMBI-disk block info: Offset Size Description (Table 0687) 00h DWORD block ID 04h BYTE bitmask of valid sectors in block 05h BYTE bitmask of dirty sectors in block 06h BYTE last error returned by BIOS 07h BYTE number of errors --------D-214405----------------------------- INT 21 - SFS v1.00 - DRIVER CONTROL AX = 4405h BL = drive number (00h = default, 01h = A:, etc) CX = number of bytes to write DS:DX -> data to write (see #0689) Return: CF clear if successful AX = number of bytes actually written CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Program: SFS (Secure FileSystem) is a shareware encrypting disk driver by Peter C. Gutmann SeeAlso: AX=4404h"SFS" (Table 0688) Values for SFS control function: 00h "PACKET_SET_DISKINFO" set disk parameters 01h "PACKET_SET_KEYINFO" set keying information 02h "PACKET_SET_READONLY" select read/write or read-only 03h "PACKET_SET_DRIVENO" set drive number to mount 04h "PACKET_SET_MOUNTSTATUS" set mount status 05h "PACKET_SET_UNMOUNT" set/clear quick-unmount hotkey 06h "PACKET_SET_TIMEOUT" set/clear auto-unmount timeout Format of SFS control data packet: Offset Size Description (Table 0689) 00h WORD signature 4330h ('C0') 02h WORD function (see #0688) ---function 00h--- 04h WORD sector size in bytes 06h BYTE sectors per cluster 07h WORD number of boot sectors 09h BYTE number of copies of FAT 0Ah WORD size of root directory in entries 0Ch WORD number of sectors on disk, 16-bit 0Eh BYTE media descriptor byte 0Fh WORD sectors per FAT 11h WORD sectors per track 13h WORD number of heads 15h DWORD number of hidden sectors 19h DWORD number of sectors on disk, 32-bit ---function 01h--- 04h 20 BYTEs master IV for encrypted disk 18h 64 BYTEs NDC/SHS keying information ---function 02h--- 04h WORD read-only state: 00h read-only, 01h read/write ---function 03h--- 04h WORD drive number (see #0690) 06h DWORD sector offset of logical volume from start of physical volume 0 if logical volume = physical volume ---function 04h--- 04h WORD mount status (00h unmounted, 01h mounted) ---function 05h--- 04h WORD hotkey (high byte = shift state, low byte = scan code or 00h) 0000h to disable hotkey ---function 06h--- 04h WORD timeout in minutes before automatic unmount 0000h to disable auto-unmount Notes: the data for function 00h corresponds to a DOS BPB (see AH=53h) functions 00h, 01h, and 03h automatically unmount the encrypted drive unmounting a drive with function 04h also destroys the encryption information in the driver and forces all dirty buffers to be flushed Bitfields for SFS drive number: Bit(s) Description (Table 0690) 15-12 drive access mode 0000 BIOS access 0001 direct IDE access 0010 direct SCSI access ---if BIOS access--- 11-8 unused (0) 7-0 BIOS drive number ---if IDE access--- 11-8 unused (0) 7-0 IDE drive number ---if SCSI access--- 11-8 SCSI host number 7-4 SCSI target ID 3-0 SCSI logical unit number --------D-214406----------------------------- INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS AX = 4406h BX = file handle Return: CF clear if successful AL = input status 00h not ready (device) or at EOF (file) FFh ready CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at AH=59h) Note: files may not register as being at EOF if positioned there by AH=42h SeeAlso: AX=4407h,INT 2F/AX=122Bh --------D-214407----------------------------- INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS AX = 4407h BX = file handle Return: CF clear if successful AL = input status 00h not ready FFh ready CF set on error AX = error code (01h,05h,06h,0Dh) (see #0811 at 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 --------D-214408----------------------------- INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE AX = 4408h BL = drive number (00h = default, 01h = A:, etc) Return: CF clear if successful AX = media type (0000h removable, 0001h fixed) CF set on error AX = error code (01h,0Fh) (see #0811 at AH=59h) SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh --------D-214409----------------------------- INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE AX = 4409h BL = drive number (00h = default, 01h = A:, etc) Return: CF clear if successful DX = device attribute word bit 15: drive is SUBSTituted bit 12: drive is remote bit 9: direct I/O not allowed CF set on error AX = error code (01h,0Fh) (see #0811 at AH=59h) Note: on local drives, DX bits not listed above are the attribute word from the device driver header (see #0785 at AH=52h); for remote drives, the other bits appear to be undefined for DOS versions prior to 5.0 (they are all cleared in DOS 5+) checking whether DX=0800h on return appears to be a fairly reliable method for detecting Microsoft's RAMDRIVE SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh --------D-21440A----------------------------- INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE AX = 440Ah BX = handle Return: CF clear if successful DX = attribute word (as stored in SFT) bit 15: set if remote bit 14: date/time not set on close CF set on error AX = error code (01h,06h) (see #0811 at AH=59h) Notes: if file is remote, Novell Advanced NetWare 2.0 returns the number of the file server on which the handle is located in CX DR-DOS 3.41 and 5.0 clear all bits of DX except bit 15 SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh --------D-21440B----------------------------- INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT AX = 440Bh CX = pause between retries (default 1) DX = number of retries (default 3) Return: CF clear if successful CF set on error AX = error code (01h) (see #0811 at 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 --------D-21440C----------------------------- INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST AX = 440Ch BX = device handle CH = category code (see #0691) CL = function number (see #0692) DS:DX -> parameter block (see #0693,#0694,#0695,#0696,#0697,#0698) SI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box) DI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box) Return: CF set on error AX = error code (see #0811 at AH=59h) CF clear if successful DS:DX -> iteration count if CL=65h SI = returned value (European MS-DOS 4.0, OS/2 comp box) DI = returned value (European MS-DOS 4.0, OS/2 comp box) Note: DR-DOS 3.41 and 5.0 return error code 16h on CL=45h,65h if the device does not support a retry counter SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=14FFh SeeAlso: INT 2F/AX=1A01h (Table 0691) Values for IOCTL 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 (Table 0692) Values for generic character IOCTL function: 00h MAC driver Bind (STARLITE) 45h set iteration (retry) count 4Ah select code page 4Ch start code-page preparation 4Dh end code-page preparation 5Fh set display information (DOS 4+) 65h get iteration (retry) count 6Ah query selected code page 6Bh query prepare list 7Fh get display information (DOS 4+) Note: bit assignments for function code: bit 7: set to ignore if unsupported, clear to return error bit 6: set if passed to driver, clear if intercepted by DOS bit 5: set if queries data from device, clear if sends command bits 4-0: subfunction Format of parameter block for function 00h: Offset Size Description (Table 0693) 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 (Table 0694) 00h WORD number of times output is attempted before driver assumes device is busy Format of parameter block for functions 4Ah and 6Ah: Offset Size Description (Table 0695) 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 4Ch: Offset Size Description (Table 0696) 00h WORD flags DISPLAY.SYS = 0000h PRINTER.SYS bit 0 clear to prepare downloaded font, set to prepare cartridge selection 02h WORD length of remainder of parameter block 04h WORD number of code pages following 06h N WORDs code page 1,...,N Format of parameter block for function 4Dh: Offset Size Description (Table 0697) 00h WORD length of data 02h WORD code page ID Format of parameter block for functions 5Fh and 7Fh: Offset Size Description (Table 0698) 00h BYTE level (0 for DOS 4.x-6.0) 01h BYTE reserved (0) 02h WORD length of following data (14) 04h WORD control flags bit 0 set for blink, clear for intensity bits 1-15 reserved 06h BYTE mode type (1=text, 2=graphics) 07h BYTE reserved (0) 08h WORD colors 0000h = monochrome else N bits per pixel 0Ah WORD pixel columns 0Ch WORD pixel rows 0Eh WORD character columns 10h WORD character rows Format of parameter block for function 6Bh: Offset Size Description (Table 0699) 00h WORD length of following data 02h WORD number of hardware code pages 04h N WORDs hardware code pages 1,...,N WORD number of prepared code pages N WORDs prepared code pages 1,...,N --------d-21440C----------------------------- INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE AX = 440Ch BX = device handle CH = category code 07h tape (ASPITAPE.SYS) CL = function 01h "mtop" - perform tape operation 02h "mtget" - get tape status 03h ignore end-of-tape errors 04h enable end-of-tape errors DS:DX -> parameter block (see #0700,#0701) Return: CF set on error AX = error code (see #0811 at 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 ASPITAPE.SYS mtop parameter block: Offset Size Description (Table 0700) 00h WORD operation code 00h "MTWEOF" - write an end-of-file record 01h "MTFSF" - forward space file 02h "MTBSF" - backward space file 03h "MTFSR" - forward space record 04h "MTBSR" - backward space record 05h "MTREW" - rewind 06h "MTOFFL" - rewind and unload 07h "MTNOP" - perform TEST UNIT READY 02h DWORD repetition count Format of ASPITAPE.SYS mtget parameter block: Offset Size Description (Table 0701) 00h BYTE ASPI host ID 01h BYTE SCSI target ID 02h BYTE SCSI logical unit number 03h BYTE device parameters bit 0: drive must use fixed-block read and write bit 7: drive is an ASPI device 04h BYTE current device state (see #0702) 05h BYTE unit number within driver 06h WORD fixed block blocksize 08h BYTE last SCSI status 09h BYTE last SCSI sense key 0Ah WORD last SCSI opcode (packed) (see #0703) 0Ch WORD residual bytes from SCSI opcode Bitfields for ASPITAPE.SYS current device state: Bit(s) Description (Table 0702) 0 device currently opened in buffered mode 1 drive currently opened in nonbuffered mode 2 rewind drive on last close 3 drive has been written on 4 drive has been read from 5 next read will return 0 bytes 6 EOM will resemble EOF 7 drive may be busy rewinding Bitfields for SCSI opcode: Bit(s) Description (Table 0703) 0-7 SCSI operation (SCSI packet byte 0) 8-10 SCSI flags (SCSI packet byte 1) 11-12 ASPI "Direction Bits" (ASPI SRB byte 3) --------D-21440D----------------------------- INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST AX = 440Dh BL = drive number (00h=default,01h=A:,etc) CH = category code (see #0704) CL = minor code (function) (see #0705) DS:DX -> (DOS) parameter block (see #0706,#0708,#0709,#0710,#0711) SI:DI -> (OS/2 comp box) parameter block (see #0712,#0713,#0714,#0715) Return: CF set on error AX = error code (01h,02h) (see #0811 at 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+ the DUBLDISK.SYS v2.6 driver only supports minor codes 60h and 67h DR-DOS 3.41-6.0 only support minor codes 40h-42h and 60h-62h; all other minor codes return error code 16h some PCMCIA calls reportedly appear to be dangerous for MS-DOS versions prior to 5.0 SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh (Table 0704) Values for block device IOCTL category code: 08h disk drive 00h-7Fh reserved for Microsoft 80h-FFh reserved for OEM/user-defined (Table 0705) Values for generic block IOCTL minor code: 00h (OS/2) \ used to lock/unlock a drive 01h (OS/2) / 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 50h (PCMCIA) attribute memory write 51h (PCMCIA) common memory write 52h (PCMCIA) force media change (DOS 5+ ???) 53h (PCMCIA) erase drive 54h (PCMCIA) erase media 56h (PCMCIA) set erase status callback 57h (PCMCIA) append Card Information Structure (CIS) tuple 58h (PCMCIA) erase CIS tuples 60h get device parameters 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 70h (PCMCIA) attribute memory read 73h (PCMCIA) get memory media information (DOS 5+ ???) 76h (PCMCIA) get erase status callback 77h (PCMCIA) get first Card Information Structure (CIS) tuple 78h (PCMCIA) get next CIS tuple 7Fh (PCMCIA) get ??? information Format of parameter block for functions 40h, 60h: Offset Size Description (Table 0706) 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 (see #0707) 02h WORD device attributes bit 0 set if nonremovable medium bit 1 set if door lock ("changeline") supported bits 2-15 reserved 04h WORD number of cylinders 06h BYTE media type for 1.2M drive 00h 1.2M disk (default) 01h 320K/360K disk F8h for DUBLDISK.SYS v2.6 expanded drives always 00h for other drive types 07h 31 BYTEs device BPB (see #0801 at AH=53h), bytes after BPB offset 1Eh omitted ---function 40h only--- 26h WORD number of sectors per track (start of track layout field) (maximum 63) 28h N word pairs: number,size of each sector in track (Table 0707) Values for 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+) other type of block device, normally 1.44M floppy 08h read/write optical disk 09h (DOS 5+) 2.88M floppy Format of parameter block for functions 41h, 61h: Offset Size Description (Table 0708) 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 function 42h: Offset Size Description (Table 0709) 00h BYTE reserved, must be zero (DOS <3.2) bit 0=0: format/verify track 1: format status call (DOS 3.2+), don't actually format bits 1-7 reserved, must be zero value on return (DOS 3.3+): 00h specified tracks, sectors/track supported by BIOS 01h function not supported by BIOS 02h specified tracks, sectors/track not allowed for drive 03h no disk in drive 01h WORD number of disk head 03h WORD number of disk cylinder Format of parameter block for function 62h: Offset Size Description (Table 0710) 00h BYTE reserved, must be zero (DOS <3.2) bit 0=0: verify single track 1: verify multiple tracks bits 1-7 reserved, must be zero value on return (DOS 3.3+): 00h specified tracks, sectors/track supported by BIOS 01h function not supported by BIOS 02h specified tracks, sectors/track not allowed for drive 03h no disk in drive 01h WORD number of disk head 03h WORD number of disk cylinder 05h WORD number of tracks to verify (equivalent to 255 or fewer sectors) Format of parameter block for functions 46h, 66h: Offset Size Description (Table 0711) 00h WORD (call) info level (should be 0000h) 02h DWORD disk serial number (binary) 06h 11 BYTEs volume label or "NO NAME " 11h 8 BYTEs filesystem type "FAT12 " or "FAT16 " (CL=66h only) Format of parameter block for functions 47h, 67h: Offset Size Description (Table 0712) 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 52h: 00h BYTE (call) unused??? (Table 0713) (return) 00h if flash/ATA drive but no card inserted unchanged otherwise Notes: the absense of a flash card should be tested by checking the DOS error code rather than the returned byte the parameter byte is cleared to 00h erroneously by the Award PCDISK.EXE v1.02c PCMCIA/ATA driver if no ATA card is inserted (bug corrected in PCDISK.EXE v1.02h and later) not supported by the SystemSoft ATADRV.EXE and the Phoenix PCMATA.SYS PCMCIA/ATA drivers Format of parameter block for function 68h: Offset Size Description (Table 0714) 00h BYTE 01h for default media type, 00h for any other media type (see also INT 13/AH=20h"Compaq") 01h BYTE 02h for 720K, 07h for 1.44M, 09h for 2.88M Format of parameter block for function 73h: Offset Size Description (Table 0715) 00h BYTE ??? 00h ATA card inserted ??? 80h ATA card not inserted ??? 01h BYTE length of parameter block ??? apparently always 40h 02h BYTE ??? 00h ATA card not inserted ??? 0Dh ATA card inserted ??? 03h 2 BYTEs ??? (apparently always 00h) 05h BYTE drive number (0=first) ??? 06h BYTE total number of drives ??? 07h BYTE ??? 00h ATA card not inserted ??? 01h ATA card inserted ??? 08h 17 BYTEs ??? 19h BYTE ??? 00h ATA card not inserted ??? 01h ATA card inserted ??? 1Ah BYTE ??? (apparently always 01h) 1Bh BYTE ??? 00h ATA card not inserted ??? 01h ATA card inserted ??? 1Ch 2 BYTEs ??? (apparently always 0015h) 1Eh 2 BYTEs ??? 20h 2 BYTEs ??? (apparently always 0110h) 22h 15 BYTEs ??? 31h 2 BYTEs ??? (apparently always 7000h) 33h 11 BYTEs driver signature "AWARD PDISK" for Award PCDISK.EXE PCMCIA/ATA driver 3Eh 2 BYTEs ??? Note: this function is not supported by the SystemSoft ATADRV.EXE and the Phoenix PCMATA.SYS PCMCIA/ATA drivers Format of parameter block for function 7Fh for SystemSoft ATADRV.EXE: Offset Size Description (Table 0716) 00h DWORD -> unknown location within driver Note: function supported by the SystemSoft ATADRV.EXE PCMCIA/ATA driver but not by the Award PCDISK.EXE PCMCIA/ATA driver Format of parameter block for function 7Fh for Phoenix PCMATA.SYS: Offset Size Description (Table 0717) 00h 8 BYTEs ??? Note: this function supported by the Phoenix PCMATA.SYS PCMCIA/ATA driver but not by the Award PCDISK.EXE PCMCIA/ATA driver --------D-21440E----------------------------- INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP AX = 440Eh BL = drive number (00h=default,01h=A:,etc) Return: CF set on error AX = error code (01h,0Fh) (see #0811 at 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) Note: DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus always returns AL=00h SeeAlso: AX=440Fh,INT 2F/AX=122Bh --------D-21440F----------------------------- INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP AX = 440Fh BL = physical drive number (00h=default,01h=A:,etc)) Return: CF set on error AX = error code (01h,0Fh) (see #0811 at AH=59h) CF clear if successful drive now responds to next logical drive number Notes: maps logical drives to physical drives, similar to DOS's treatment of a single physical floppy drive as both A: and B: DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus always returns an error on this function SeeAlso: AX=440Eh,INT 2F/AX=122Bh --------D-214410----------------------------- INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE) AX = 4410h BX = handle for device CH = category code (see #0691) CL = function code (see #0692) 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 --------d-214410BXFFFF----------------------- INT 21 U - NewSpace - ENABLE DRIVER AX = 4410h BX = FFFFh Program: NewSpace is a TSR by Isogon Corporation which automatically compresses all files as they are written and decompresses them as they are read Note: compressed files are not accessible unless the driver is enabled SeeAlso: AX=4411h/BX=FFFFh --------D-214411----------------------------- INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE) AX = 4411h BL = drive number CH = category code (see #0704) CL = function code (see #0705) 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 --------d-214411BXFFFF----------------------- INT 21 U - NewSpace - DISABLE DRIVER AX = 4411h BX = FFFFh Program: NewSpace is a TSR by Isogon Corporation which automatically compresses all files as they are written and decompresses them as they are read Note: compressed files are not accessible unless the driver is enabled SeeAlso: AX=4410h/BX=FFFFh --------O-214412----------------------------- INT 21 O - DR-DOS 5.0-6.0 - DETERMINE DOS TYPE AX = 4412h CF set Return: CF set if not DR-DOS AX = error code (see #0811 at AH=59h) CF clear if DR-DOS DX = AX = version code (see #0719) Note: this obsolete call, which is no longer supported in Novell DOS 7, is identical to AX=4452h SeeAlso: AX=4452h --------d-214412BXFFFF----------------------- INT 21 U - NewSpace - INSTALLATION CHECK??? AX = 4412h BX = FFFFh Return: AX = PSP segment of NewRes (resident driver for NewSpace) BX:DX -> ??? CX = ??? SeeAlso: AX=4411h/BX=FFFFh --------d-214413BXFFFF----------------------- INT 21 U - NewSpace - GET ??? AX = 4413h BX = FFFFh Return: AX = code segment of NewRes (resident driver for NewSpace) BX = offset of ??? SeeAlso: AX=4412h/BX=FFFFh --------O-214414----------------------------- INT 21 OU - DR-DOS 5.0-6.0 - SET GLOBAL PASSWORD AX = 4414h DS:DX -> password string (blank-padded to 8 characters) Desc: Specify the master password for accessing files. Note: this obsolete call, which is no longer supported in Novell DOS 7, is identical to AX=4454h SeeAlso: AX=4454h --------d-214414BXFFFF----------------------- INT 21 U - NewSpace - DEBUGGING DUMP AX = 4414h BX = FFFFh Return: debugging dump written to X:\NEWSPACE.SMP SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh --------O-2144------------------------------- INT 21 OU - DR-DOS 5.0-6.0 - HISTORY BUFFER, SHARE, AND HILOAD CONTROL AH = 44h AL = 16h to 18h Note: these obsolete subfunctions (which are no longer supported in Novell DOS 7) are identical to AX=4456h through 4458h SeeAlso: AX=4456h,AX=4457h,AX=4458h --------O-214451----------------------------- INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK AX = 4451h Return: CF set if not Concurrent DOS AX = error code (see #0811 at AH=59h) CF clear if successful AH = single-user/multiuser nature 10h single-user AL = operating system version ID (see #0719) 14h multiuser AL = operating system version ID (see #0718) 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 multiuser capabilities, AX=4452h for single-user this function should never return the single-user values SeeAlso: AX=4452h,AX=4459h (Table 0718) Values for Digital Research operating system version ID: 32h Concurrent PC DOS 3.2 41h Concurrent DOS 4.1 50h Concurrent DOS/XM 5.0 or Concurrent DOS/386 1.1 60h Concurrent DOS/XM 6.0 or Concurrent DOS/386 2.0 62h Concurrent DOS/XM 6.2 or Concurrent DOS/386 3.0 66h DR Multiuser DOS 5.1 67h Concurrent DOS 5.1 --------O-214452----------------------------- INT 21 - DR-DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION AX = 4452h ("DR") CF set Return: CF set if not DR-DOS AX = error code (see #0811 at AH=59h) CF clear if DR-DOS AX = version code AH = single-user/multiuser nature 10h single-user AL = operating system version ID (see #0719) 14h multiuser AL = operating system version ID (see #0718) DX modified (see note) Notes: the DR-DOS version is stored in the environment variable VER use this function if looking for single-user capabilities, AX=4451h if looking for multiuser; this call should never return multiuser values in DR-DOS 3.41-6.0, DX=AX on return; for Novell DOS 7, DH=AH but DL=00h (reportedly, DH=00h when booting NWDOS7 from installation disks) Novell DOS 7 returns error code 0001h if SETVER 255.x is in effect for the calling program SeeAlso: AX=4412h,AX=4451h,AX=4459h (Table 0719) Values for Digital Research 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 70h PalmDOS 71h DR-DOS 6.0 March 1993 "business update" 72h Novell DOS 7.0 --------O-214454----------------------------- INT 21 U - DR-DOS 3.41+ - SET GLOBAL PASSWORD AX = 4454h DS:DX -> password string (blank-padded to 8 characters) Desc: Specify the master password for accessing files. SeeAlso: AX=4303h,AX=4414h --------O-214456----------------------------- INT 21 U - DR-DOS 5.0+ - HISTORY BUFFER CONTROL AX = 4456h DL = control flags (see #0720) Return: AL = previous value of state flags (see #0721) Note: DR-DOS 6.0 only checks bit 0 and ignores the rest of DL SeeAlso: #0722 Bitfields for control flags: Bit(s) Description (Table 0720) 0 whose buffer: 0=application, 1=COMMAND.COM ---Novell DOS 7--- 1 toggle HISTORY usage 2 toggle INSERT state Note: only one bit at a time may be used Bitfields for state flags: Bit(s) Description (Table 0721) 0 HISTORY buffer enabled 1 INSERT enabled 2-5 unused 7 whose buffer: 0=application, 1=COMMAND.COM --------O-214457----------------------------- INT 21 U - DR-DOS 5.0+ - SHARE/HILOAD CONTROL AX = 4457h DH = subfunction 00h enable/disable SHARE DL = 00h disable = 01h enable else Return: AX = ??? 01h get HILOAD status Return: AX = status 0000h off 0001h on 02h set HILOAD status DL = new state (00h off, 01h on) Return: AX = ??? other Return: AX = ??? Note: This was seen called by COMMAND.COM of DR-DOS 6.0; it does not seem to be supported by Novell DOS 7 SeeAlso: AX=4457h/DX=FFFFh --------O-214457DXFFFF----------------------- INT 21 U - DR-DOS 6.0 - GET SHARE STATUS AX = 4457h DX = FFFFh Return: AX = SHARE status SeeAlso: INT 2F/AX=1000h --------O-214458----------------------------- INT 21 U - DR-DOS 5.0+ internal - GET POINTER TO INTERNAL VARIABLE TABLE AX = 4458h Return: ES:BX -> internal variable table (see #0722,#0723) AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0, 0FE4h for Novell DOS 7) SeeAlso: AX=4452h Format of DR-DOS 5.0-6.0 internal variable table: Offset Size Description (Table 0722) 00h WORD ??? 02h WORD segment of ??? 04h WORD offset within DOS data segment of history control structure for COMMAND.COM history buffer (see #0724) 06h WORD offset within DOS data segment of history control structure for application history buffer (see #0724) 08h BYTE initial history state flags (see #0721) 09h 2 BYTEs ??? 0Bh WORD KB of extended memory at startup 0Dh BYTE number of far jump entry points 0Eh WORD segment containing far jumps to DR-DOS entry points (see #0725) 10h WORD (only if kernel loaded in HMA) offset in HMA of first free HMA memory block (see #0726) or 0000h if none; segment is FFFFh 12h WORD pointer to segment of environment variables set in CONFIG, or 0000h if already used ---DR-DOS 6.0--- 14h WORD (only if kernel loaded in HMA) offset in HMA of first used HMA memory block (see #0726) or 0000h if none; segment is FFFFh 16h 8 BYTEs ??? 1Eh WORD offset in DOS data segment of full COUNTRY.SYS filename 20h 8 BYTEs ??? 28h WORD offset in DOS data segment of SHARE hook table 2Ah 2 BYTEs ??? 2Ch WORD offset in DOS data segment of far pointer to INT 2F/AX=1000h handler 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 when the area is copied to the COMMAND.COM environment space. This allows CONFIG.SYS to pass information to AUTOEXEC.BAT. Format of Novell DOS 7 internal variable table: Offset Size Description (Table 0723) 00h ??? 1Eh WORD offset of COUNTRY.SYS filename 42h 16 DWORDs pointers to ??? entry points ??? Format of history control structure: Offset Size Description (Table 0724) 00h WORD segment of buffer 02h WORD size of buffer in bytes 04h WORD ??? Format of kernel entry jump table for DR-DOS 5.0-6.0: Offset Size Description (Table 0725) 00h 5 BYTEs far jump to kernel entry point for CP/M CALL 5 05h 5 BYTEs far jump to kernel entry point for INT 20 0Ah 5 BYTEs far jump to kernel entry point for INT 21 0Fh 5 BYTEs far jump to kernel entry point for INT 22 (RETF) 14h 5 BYTEs far jump to kernel entry point for INT 23 (RETF) 19h 5 BYTEs far jump to kernel entry point for INT 24 1Eh 5 BYTEs far jump to kernel entry point for INT 25 23h 5 BYTEs far jump to kernel entry point for INT 26 28h 5 BYTEs far jump to kernel entry point for INT 27 2Dh 5 BYTEs far jump to kernel entry point for INT 28 32h 5 BYTEs far jump to kernel entry point for INT 2A (IRET) 37h 5 BYTEs far jump to kernel entry point for INT 2B (IRET) 3Ch 5 BYTEs far jump to kernel entry point for INT 2C (IRET) 41h 5 BYTEs far jump to kernel entry point for INT 2D (IRET) 46h 5 BYTEs far jump to kernel entry point for INT 2E (IRET) 4Bh 5 BYTEs far jump to kernel entry point for INT 2F Notes: all of these entry points are indirected through this jump table to allow the kernel to be relocated into high memory while leaving the actual entry addresses in low memory for maximum compatibility some of these entry points (22h,23h,24h,2Eh,2Fh) are replaced as soon as COMMAND.COM is loaded, and return immediately to the caller, some returning an error code (the original handler for INT 2F returns AL=03h [fail]). Format of HMA Memory Block (DR-DOS 6.0 kernel loaded in HMA): Offset Size Description (Table 0726) 00h WORD offset of next HMA Memory Block (0000h if last block) 02h WORD size of this block in bytes (at least 10h) 04h BYTE type of HMA Memory Block (interpreted by MEM) 00h system 01h KEYB 02h NLSFUNC 03h SHARE 04h TaskMAX 05h COMMAND 05h var TSR (or system) code and data. DR-DOS TSR's, such as KEYB, hooks interrupts using segment FFFEh instead FFFFh. --------O-214459----------------------------- INT 21 - DR MultiUser DOS 5.0 - API AX = 4459h CL = function (see INT E0"CP/M") DS,DX = parameters Notes: DR-DOS 5.0 and Novell DOS 7 return CF set and AX=0001h this API is also available on INT E0 SeeAlso: AX=4452h,INT E0"CP/M" --------N-2144E0----------------------------- INT 21 U - Sun PC-NFS - API??? AX = 44E0h DS:DX -> ??? SS:BP -> stack frame (see #0727) Return: ??? Note: this function is also supported by Beame&Whiteside's BWPCNFS shim; the description presented here was derived from that shim Format of PC-NFS stack frame: Offset Size Description (Table 0727) 00h WORD -> previous stack frame 02h DWORD return address --------d-2144FFBXFFFF----------------------- INT 21 U - NewSpace - ??? AX = 44FFh BX = FFFFh DX = ??? Program: NewSpace is a TSR by Isogon Corporation which automatically compresses all files as they are written and decompresses them as they are read SeeAlso: AX=4414h/BX=FFFFh --------!---Section--------------------------