Interrupt List, part 5 of 8 This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown ----------2F--------------------------------- INT 2F - Multiplex - NOTES AH = identifier of program which is to handle the interrupt 00h-7Fh reserved for DOS B8h-BFh reserved for networks C0h-FFh reserved for applications AL is the function code This is a general mechanism for verifying the presence of a TSR and communicating with it. When searching for a free identifier code for AH using the installation check (AL=00h), the calling program should set BX/CX/DX to 0000h and must not depend on any registers other than CS:IP and SS:SP to be valid on return, since numerous programs now use additional registers on input and/or output for the installation check. Note: Since the multiplex chain is growing so long, and beginning to experience multiplex number collisions, I am proposing an alternate multiplex interrupt on INT 2D. If you decide to use the alternate multiplex, please let me know. SeeAlso: INT 2D ----------2F--------------------------------- INT 2F - BMB Compuscience Canada Utilities Interface AH = xx (dynamically assigned based upon a search for a multiplex number which doesn't answer installed) AL = 00h installation check ES:DI = EBEBh:BEBEh Return: AL = 00h not installed 01h not installed, not OK to install FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a short form of the manufacturer's name, PPPPPPPP is a product name and NNNN is the product's version number ----------2F--------------------------------- INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY AH = programmer-selected multiplex number AL = function 00h installation check Return: AL = FFh if installed 01h get TSR interrupt vectors Return: DX:AX -> vector table (see below) 02h get TSR code segment Return: AX = code segment for all interrupt handlers 03h call user exit routine and release TSR's memory 04h get signature string Return: DX:AX -> counted string containing signature 05h get TSR's INT 2F handler Return: DX:AX -> INT 2F handler 06h enable/disable TSR BL = new state (00h disabled, 01h enabled) 07h activate TSR (popup if not disabled) 08h get hotkeys BL = which hotkey (00h = hotkey 1, 01h = hotkey 2) Return: AX = hotkey (AH = keyflags, AL = scancode) 09h set hotkey BL = which hotkey (00h = hotkey 1, 01h = hotkey 2) CX = new hotkey (CH = keyflags, CL = scancode) 0Ah-1Fh reserved Format of vector table entry: Offset Size Description 00h BYTE vector number (00h = end of table) 01h DWORD original vector 05h WORD offset of interrupt handler in TSR's code segment ----------2F--------------------------------- INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface AH = xx (dynamically assigned based upon a search for a multiplex number from C0h to FFh which doesn't answer installed) AL = 00h installation check ES:DI = 1492h:1992h Return: AL = 00h not installed 01h not installed, not OK to install FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will point to author_name_ver table (see below) AH = FFh Note: this interface permits advanced communication with TSRs: it is possible to make a generic unistall utility, advanced TSR relocator programs in order to fit fragmented memory areas, etc. See also: INT 2D"AMIS",INT 2F"Compuscience" Format of author_name_ver table: Offset Size Description -16 WORD segment in which really begins the TSR code (CS in programs with PSP, XMS upper memory segment if installed as UMB...) -14 WORD offset in which really begins the TSR code (frecuently 100h in *.COM programs and 0 in upper memory TSR's). -12 WORD memory used by TSR (in paragraphs). Knowing the memory area used by TSR is possible to determine if hooked vectors are still pointing it (and if it is safe the unistall process). -10 BYTE characteristics byte bits 0-2: 000 normal program (with PSP) 001 upper XMS memory block (needed HIMEM.SYS function to free memory when unistalling) 010 device driver (*.SYS) 011 device driver in EXE format 1xx others (reserved) bits 3-6 reserved bit 7 set if extra_table defined and supported -9 BYTE number of multiplex entry used (redefinition available). Note that the TSR must be use THIS variable in it's INT 2Fh handler. -8 WORD offset to vector_area table (see bellow) -6 WORD offset to extra_area table (see bit 7 in offset -10 and bellow) -4 4 BYTEs "*##*" (to insure that the TSR verify this agreement) 00h var "AUTHOR:PROGRAM_NAME:VERSION",0 (variable length, this area is used in order to determine if the TSR is already resident and it's version code; the ':' char is used as delimiter) Format of vector_area table: Offset Size Description -1 BYTE number of vectors intercepted by TSR 00h BYTE first vector number 01h DWORD first vector pointer before installing the TSR 05h BYTE second vector number 06h DWORD second vector pointer before installing the TSR . . (and so on) Note that the TSR must be use THIS variables to invoke previous interrupt handler routines. Format of extra_area table (needed only to improve relocation feature): Offset Size Description 00h WORD offset to external_ctrl table (0 if not supported) 02h WORD reserved for future use (0) Format of external_ctrl table: Offset Size Description 00h BYTE bit 0: TSR is relocatable (no absolute segment references) 01h WORD offset to a variable which can activate/inhibit the TSR ---And if bit 0 in offset 00h is off: 03h DWORD pointer to ASCIIZ with pathname to executable file which supports /SR parameter (silent installation & inhibit) 07h DWORD pointer to first variable to initialize on the copy reloaded from the previous TSR still resident 0Bh DWORD pointer to last variable (all variables packed in one block) ----------2F00------------------------------- INT 2F U - DOS 2.x PRINT.COM - ??? AH = 00h ??? Return: ??? Notes: DOS 2.x PRINT.COM does not chain to previous INT 2F handler values in AH other than 00h or 01h cause PRINT to return the number of files in the queue in AH SeeAlso: AH=01h ----------2F0080----------------------------- INT 2F - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE AX = 0080h Return: after PRINT executes ----------2F01------------------------------- INT 2F U - DOS 2.x PRINT.COM - ??? AH = 01h ??? Return: ??? Notes: DOS 2.x PRINT.COM does not chain to previous INT 2F handler values in AH other than 00h or 01h cause PRINT to return the number of files in the queue in AH SeeAlso: AH=00h ----------2F0100----------------------------- INT 2F - DOS 3+ PRINT.COM - INSTALLATION CHECK AX = 0100h Return: AL = status 00h not installed 01h not installed, but not OK to install FFh installed SeeAlso: AX=0101h ----------2F0101----------------------------- INT 2F - DOS 3+ PRINT.COM - SUBMIT FILE FOR PRINTING AX = 0101h DS:DX -> submit packet (see below) Return: CF clear if successful AL = 01h added to queue 9Eh now printing CF set on error AX = error code (see also INT 21/AH=59h) 01h invalid function 02h file not found 03h path not found 04h out of file handles 05h access denied 08h print queue full 09h spooler busy 0Ch name too long 0Fh invalid drive SeeAlso: AX=0102h Format of submit packet: Offset Size Description 00h BYTE level (must be 00h) 01h DWORD pointer to ASCIZ filename (no wildcards) ----------2F0102----------------------------- INT 2F - DOS 3+ PRINT.COM - REMOVE FILE FROM PRINT QUEUE AX = 0102h DS:DX -> ASCIZ filename (wildcards allowed) Return: CF clear if successful CF set on error AX = error code (see AX=0101h) SeeAlso: AX=0101h,AX=0103h ----------2F0103----------------------------- INT 2F - DOS 3+ PRINT.COM - CANCEL ALL FILES IN PRINT QUEUE AX = 0103h Return: CF clear if successful CF set on error AX = error code (see AX=0101h) SeeAlso: AX=0102h ----------2F0104----------------------------- INT 2F - DOS 3+ PRINT.COM - FREEZE PRINT QUEUE TO READ JOB STATUS AX = 0104h Return: CF clear if successful DX = error count DS:SI -> print queue CF set on error AX = error code (see AX=0101h) Notes: the print queue is an array of 64-byte ASCIZ filenames terminated by an empty filename; the first name is the file currently being printed printing is stopped until AX=0105h is called to prevent the queue from changing while the filenames are being read SeeAlso: AX=0101h,AX=0105h ----------2F0105----------------------------- INT 2F - DOS 3+ PRINT.COM - RESTART PRINT QUEUE AFTER STATUS READ AX = 0105h Return: CF clear if successful CF set on error AX = error code (see AX=0101h) SeeAlso: AX=0104h ----------2F0106----------------------------- INT 2F - DOS 3.3+ PRINT.COM - GET PRINTER DEVICE AX = 0106h Return: CF set if files in print queue AX = error code 0008h (queue full) DS:SI -> device driver header CF clear if print queue empty AX = 0000h Note: documented for DOS 5+, but not documented for prior versions SeeAlso: AX=0104h ----------2F0200----------------------------- INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK AX = 0200h Return: AL = FFh if installed ----------2F0201----------------------------- INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ??? AX = 0201h Return: nothing??? Notes: called by DOS 3.3+ PRINT.COM AX=0202h appears to be the opposite function SeeAlso: AX=0202h ----------2F0202----------------------------- INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ??? AX = 0202h ??? Return: nothing??? Note: called by DOS 3.3+ PRINT.COM SeeAlso: AX=0201h ----------2F0203----------------------------- INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ??? AX = 0203h Return: nothing??? Notes: called by DOS 3.3+ PRINT.COM AX=0204h appears to be the opposite function SeeAlso: AX=0204h ----------2F0204----------------------------- INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ??? AX = 0204h ??? Return: nothing??? Note: called by DOS 3.3 PRINT.COM ----------2F--------------------------------- INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ??? AX = 02xxh ??? Return: ??? ----------2F0500----------------------------- INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK AX = 0500h Return: AL = 00h not installed, OK to install 01h not installed, can't install FFh installed Note: this set of functions allows a user program to partially or completely override the default critical error handler's message in COMMAND.COM SeeAlso: AH=05h,INT 24 ----------2F05------------------------------- INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING AH = 05h ---DOS 3.x--- AL = extended error code (not zero) ---DOS 4+ --- AL = error type 01h DOS extended error code 02h parameter error BX = error code Return: CF clear if successful ES:DI -> ASCIZ error message (read-only) AL = ??? CF set if error code can't be converted to string Notes: called at start of COMMAND.COM's default critical error handler if installed by a user program, allowing partial or complete overriding of the default error message subfunction 02h called by many DOS 4 external programs SeeAlso: AX=122Eh,INT 24 ----------2F0600----------------------------- INT 2F - DOS 3+ ASSIGN - INSTALLATION CHECK AX = 0600h Return: AL = status 00h not installed 01h not installed, but not OK to install FFh installed Notes: ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST (see INT 21/AH=52h) undocumented prior to the release of DOS 5.0 SeeAlso: AX=0601h,INT 21/AH=52h ----------2F0601----------------------------- INT 2F U - DOS 3+ ASSIGN - GET DRIVE ASSIGNMENT TABLE AX = 0601h Return: ES = segment of ASSIGN work area and assignment table Note: under DOS 3+, the 26 bytes starting at ES:0103h specify which drive each of A: to Z: is mapped to. Initially set to 01h 02h 03h.... SeeAlso: AX=0600h ----------2F0800----------------------------- INT 2F U - DRIVER.SYS support - INSTALLATION CHECK AX = 0800h Return: AL = 00h not installed, OK to install 01h not installed, not OK to install FFh installed Note: supported by DR-DOS 5.0 ----------2F0801----------------------------- INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE AX = 0801h DS:DI -> drive data table (see AX=0803h) Notes: moves down internal list of drive data tables, copying and modifying the drive description flags word for tables referencing same physical drive data table appended to chain of tables supported by DR-DOS 5.0 SeeAlso: AX=0803h ----------2F0802----------------------------- INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST AX = 0802h ES:BX -> device driver request header (see below) Return: request header updated as per requested operation Notes: supported by DR-DOS 5.0 DOS 3.2 executes this function on any AL value from 02h through F7h SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah Values for command code: 00h INIT 01h MEDIA CHECK (block devices) 02h BUILD BPB (block devices) 03h IOCTL INPUT 04h INPUT 05h NONDESTRUCTIVE INPUT, NO WAIT (character devices) 06h INPUT STATUS (character devices) 07h INPUT FLUSH (character devices) 08h OUTPUT 09h OUTPUT WITH VERIFY 0Ah OUTPUT STATUS (character devices) 0Bh OUTPUT FLUSH (character devices) 0Ch IOCTL OUTPUT 0Dh (DOS 3+) DEVICE OPEN 0Eh (DOS 3+) DEVICE CLOSE 0Fh (DOS 3+) REMOVABLE MEDIA (block devices) 10h (DOS 3+) OUTPUT UNTIL BUSY (character devices) 11h (European MSDOS 4.0) STOP OUTPUT (console screen drivers only) 12h (European MSDOS 4.0) RESTART OUTPUT (console screen drivers only) 13h (DOS 3.2+) GENERIC IOCTL 14h unused 15h (European MSDOS 4.0) RESET UNCERTAIN MEDIA FLAG 16h unused 17h (DOS 3.2+) GET LOGICAL DEVICE 18h (DOS 3.2+) SET LOGICAL DEVICE 19h (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT 80h (CD-ROM) READ LONG 81h (CD-ROM) reserved 82h (CD-ROM) READ LONG PREFETCH 83h (CD-ROM) SEEK 84h (CD-ROM) PLAY AUDIO 85h (CD-ROM) STOP AUDIO 86h (CD-ROM) WRITE LONG 87h (CD-ROM) WRITE LONG VERIFY 88h (CD-ROM) RESUME AUDIO Format of device driver request header: Offset Size Description 00h BYTE length of request header 01h BYTE subunit within device driver 02h BYTE command code (see above) 03h WORD status (filled in by device driver) bit 15: error bits 14-11: reserved bit 10: ??? set by DOS kernel on entry to some driver calls bit 9: busy bit 8: done (may be clear on return under European MSDOS 4.0) bits 7-0: error code if bit 15 set (see below) ---DOS--- 05h 4 BYTEs reserved (unused in DOS 2.x and 3.x) 09h DWORD (European MSDOS 4.0 only) pointer to next request header in device's request queue (other versions) reserved (unused in DOS 2.x and 3.x) ---STARLITE architecture--- 05h DWORD pointer to next request header 09h 4 BYTEs reserved ---command code 00h--- 0Dh BYTE (return) number of units 0Eh DWORD (call) pointer to DOS device helper function (see below) (European MSDOS 4.0 only) (call) pointer past end of memory available to driver (DOS 5.0) (return) address of first free byte following driver 12h DWORD (call) pointer to commandline arguments (return) pointer to BPB array (block drivers) or 0000h:0000h (character drivers) 16h BYTE (DOS 3+) drive number for first unit of block driver (0=A) ---European MSDOS 4.0--- 17h DWORD pointer to function to save registers on stack ---DOS 5.0--- 17h WORD (return) error-message flag 0001h MSDOS should display error msg on init failure ---command code 01h--- 0Dh BYTE media descriptor 0Eh BYTE returned status 00h don't know 01h media has not changed FFh media has been changed 0Fh DWORD (return, DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM bit in device header is set and disk changed ---command code 02h--- 0Dh BYTE media descriptor 0Eh DWORD transfer address -> scratch sector if NON-IBM FORMAT bit in device header set -> first FAT sector otherwise 12h DWORD pointer to BPB (set by driver) (see INT 21/AH=53h) ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h) 0Dh BYTE media descriptor (block devices only) 0Eh DWORD transfer address 12h WORD (call) number of bytes to read/write (return) actual number of bytes read or written ---command codes 04h,08h,09h--- 0Dh BYTE media descriptor (block devices only) 0Eh DWORD transfer address 12h WORD byte count (character devices) or sector count (block devices) 14h WORD starting sector number (block devices only) 16h DWORD (DOS 3+) pointer to volume ID if error 0Fh returned 1Ah DWORD (DOS 4+) 32-bit starting sector number (block devices with device attribute word bit 1 set only) (see INT 21/AH=52h) ---command code 05h--- 0Dh BYTE byte read from device if BUSY bit clear on return ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh--- no further fields ---command code 10h--- 0Dh BYTE unused 0Eh DWORD transfer address 12h WORD (call) number of bytes to write (return) actual number of bytes written ---command codes 11h,12h--- 0Dh BYTE reserved ---command code 15h--- no further fields ---command codes 13h,19h--- 0Dh BYTE category code 00h unknown 01h COMn: 03h CON 05h LPTn: 07h mouse (European MSDOS 4.0) 08h disk 9Eh (STARLITE) Media Access Control driver 0Eh BYTE function code 00h (STARLITE) MAC Bind request 0Fh WORD copy of DS at time of IOCTL call (apparently unused in DOS 3.3) SI contents (European MSDOS 4.0) 11h WORD offset of device driver header DI contents (European MSDOS 4.0) 13h DWORD pointer to parameter block from INT 21/AX=440Ch or AX=440Dh ---command codes 80h,82h--- 0Dh BYTE addressing mode 00h HSG (default) 01h Phillips/Sony Red Book 0Eh DWORD transfer address (ignored for command 82h) 12h WORD number of sectors to read (if 0 for command 82h, request is an advisory seek) 14h DWORD starting sector number logical sector number in HSG mode frame/second/minute/unused in Red Book mode (HSG sector = minute * 4500 + second * 75 + frame - 150) 18h BYTE data read mode 00h cooked (2048 bytes per frame) 01h raw (2352 bytes per frame, including EDC/ECC) 19h BYTE interleave size (number of sectors stored consecutively) 1Ah BYTE interleave skip factor (# sectors between consec portions) ---command code 83h--- 0Dh BYTE addressing mode (see above) 0Eh DWORD transfer address (ignored) 12h WORD number of sectors to read (ignored) 14h DWORD starting sector number (see also above) ---command code 84h--- 0Dh BYTE addressing mode (see above) 0Eh DWORD starting sector number (see also above) 12h DWORD number of sectors to play ---command codes 85h,88h--- no further fields ---command codes 86h,87h--- 0Dh BYTE addressing mode (see above) 0Eh DWORD transfer address (ignored in write mode 0) 12h WORD number of sectors to write 14h DWORD starting sector number (see also above) 18h BYTE write mode 00h mode 0 (write all zeros) 01h mode 1 (default) (2048 bytes per sector) 02h mode 2 form 1 (2048 bytes per sector) 03h mode 2 form 2 (2336 bytes per sector) 19h BYTE interleave size (number of sectors stored consecutively) 1Ah BYTE interleave skip factor (# sectors between consec portions) Values for error code: 00h write-protect violation 01h unknown unit 02h drive not ready 03h unknown command 04h CRC error 05h bad drive request structure length 06h seek error 07h unknown media 08h sector not found 09h printer out of paper 0Ah write fault 0Bh read fault 0Ch general failure 0Dh reserved 0Eh (CD-ROM) media unavailable 0Fh invalid disk change Call European MSDOS 4.0 device helper function with: DL = function 00h "SchedClock" called on each timer tick AL = tick interval in milliseconds 01h "DevDone" device I/O complete ES:BX -> request header Note: must update status word first; may be called from an interrupt handler 02h "PullRequest" pull next request from queue DS:SI -> DWORD pointer to start of device's request queue Return: ZF clear if pending request ES:BX -> request header ZF set if no more requests 03h "PullParticular" remove specific request from queue DS:SI -> DWORD pointer to start of device's request queue ES:BX -> request header Return: ZF set if request header not found 04h "PushRequest" push the request onto the queue DS:SI -> DWORD pointer to start of device's request queue ES:BX -> request header interrupts disabled 05h "ConsInputFilter" keyboard input check AX = character (high byte 00h if PC ASCII character) Return: ZF set if character should be discarded ZF clear if character should be handled normally Note: called by keyboard interrupt handler so DOS can scan for special input characters 06h "SortRequest" push request in sorted order by starting sector DS:SI -> DWORD pointer to start of device's request queue ES:BX -> request header interrupts disabled 07h "SigEvent" send signal on keyboard event AH = event identifier Return: AL,FLAGS destroyed 09h "ProcBlock" block on event AX:BX = event identifier (typically a pointer) CX = timeout in ms or 0000h for never DH = interruptible flag (nonzero if pause may be interrupted) interrupts disabled Return: after corresponding ProcRun call CF clear if event wakeup, set if unusual wakeup ZF set if timeout wakeup, clear if interrupted AL = wakeup code, nonzero if unusual wakeup interrupts enabled BX,CX,DX destroyed Note: block process and schedules another to run 0Ah "ProcRun" unblock process AX:BX = event identifier (typically a pointer) Return: AX = number of processes awakened ZF set if no processes awakened BX,CX,DX destroyed 0Bh "QueueInit" initialize/clear character queue DS:BX -> character queue structure (see below) Note: the queue size field must be set before calling 0Dh "QueueWrite" put a character in the queue DS:BX -> character queue (see below) AL = character to append to end of queue Return: ZF set if queue is full ZF clear if character stored 0Eh "QueueRead" get a character from the queue DS:BX -> character queue (see below) Return: ZF set if queue is empty ZF clear if characters in queue AL = first character in queue 10h "GetDOSVar" return pointer to DOS variable AL = index of variable 03h current process ID BX = index into variable if AL specifies an array CX = expected length of variable Return: CF clear if successful DX:AX -> variable CF set on error AX,DX destroyed BX,CX destroyed Note: the variables may not be modified 14h "Yield" yield CPU if higher-priority task ready to run Return: FLAGS destroyed 1Bh "CritEnter" begin system critical section DS:BX -> semaphore (6 BYTEs, initialized to zero) Return: AX,BX,CX,DX destroyed 1Ch "CritLeave" end system critical section DS:BX -> semaphore (6 BYTEs, initialized to zero) Return: AX,BX,CX,DX destroyed Note: must be called in the context of the process which called CritEnter on the semaphore Note: the DWORD pointing at the request queue must be allocated by the driver and initialized to 0000h:0000h. It always points at the next request to be executed Format of character queue: Offset Size Description 00h WORD size of queue in bytes 02h WORD index of next character out 04h WORD count of characters in the queue 06h N BYTEs queue buffer ----------2F0803----------------------------- INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST AX = 0803h Return: DS:DI -> first drive data table in list Note: not available under DR-DOS 5.0 SeeAlso: AX=0801h Format of DOS 3.30 drive data table: Offset Size Description 00h DWORD pointer to next table 04h BYTE physical unit number (for INT 13) 05h BYTE logical drive number 06h 19 BYTEs BIOS Parameter Block (see also INT 21/AH=53h) Offset Size Description 00h WORD bytes per sector 02h BYTE sectors per cluster, FFh if unknown 03h WORD number of reserved sectors 05h BYTE number of FATs 06h WORD number of root dir entries 08h WORD total sectors 0Ah BYTE media descriptor, 00h if unknown 0Bh WORD sectors per FAT 0Dh WORD sectors per track 0Fh WORD number of heads 11h WORD number of hidden sectors 19h BYTE flags bit 6: 16-bit FAT instead of 12-bit FAT 1Ah WORD number of DEVICE OPEN calls without corresponding DEVICE CLOSE 1Ch 11 BYTEs volume label or "NO NAME " if none (always "NO NAME" for fixed media) 27h BYTE terminating null for volume label??? 28h BYTE device type (see INT 21/AX=440Dh) 29h WORD bit flags describing drive bit 0: fixed media bit 1: door lock supported bit 2: ??? (used in determining BPB to set for INT 21/AX=440Dh) bit 3: all sectors in a track are the same size bit 4: physical drive has multiple logical units bit 5: current logical drive for physical drive bit 6: ??? bit 7: ??? bit 8: ??? (related to disk change detection) 2Bh WORD number of cylinders 2Dh 19 BYTEs BIOS Parameter Block for highest capacity supported 40h 3 BYTEs ??? 43h 9 BYTEs filesystem type???, default = "NO NAME " (apparently only MSDOS 3.30 fixed media, nulls for removable media and PCDOS 3.30) 4Ch BYTE least-significant byte of last-accessed cylinder number ---removable media--- 4Dh DWORD time of last access in clock ticks (FFFFFFFFh if never) ---fixed media--- 4Dh WORD partition (FFFFh = primary, 0001h = extended) 4Fh WORD absolute cylinder number of partition's start on physical drive (always FFFFh if primary partition) Format of COMPAQ DOS 3.31 drive data table: Offset Size Description 00h DWORD pointer to next table 04h BYTE physical unit number (for INT 13) 05h BYTE logical drive number 06h 25 BYTEs BIOS Parameter Block (see DOS 4.0-5.0 drive data table below) 1Fh 6 BYTEs ??? apparently always zeros 25h BYTE flags bit 6: 16-bit FAT instead of 12-bit FAT 5: large volume??? 26h WORD device-open count??? 28h 11 BYTEs volume label or "NO NAME " if none (always "NO NAME" for fixed media) 33h BYTE terminating null for volume label 34h BYTE device type (see INT 21/AX=440Dh) 35h WORD bit flags describing drive 37h WORD number of cylinders 39h 25 BYTEs BIOS parameter block for highest capacity drive supports 52h 6 BYTEs ??? apparently always zeros 58h BYTE least-significant byte of last-accessed cylinder number ---removable media--- 59h DWORD time of last access in clock ticks (FFFFFFFFh if never) ---fixed media--- 59h WORD partition (FFFFh = primary, 0001h = extended) 5Bh WORD absolute cylinder number of partition's start on physical drive (always FFFFh if primary partition) Format of DOS 4.0-5.0 drive data table: Offset Size Description 00h DWORD pointer to next table 04h BYTE physical unit number (for INT 13) 05h BYTE logical drive number 06h 25 BYTEs BIOS Parameter Block (see also INT 21/AH=53h) Offset Size Description 00h WORD bytes per sector 02h BYTE sectors per cluster, FFh if unknown 03h WORD number of reserved sectors 05h BYTE number of FATs 06h WORD number of root dir entries 08h WORD total sectors (see offset 15h if zero) 0Ah BYTE media descriptor, 00h if unknown 0Bh WORD sectors per FAT 0Dh WORD sectors per track 0Fh WORD number of heads 11h DWORD number of hidden sectors 15h DWORD total sectors if WORD at 08h is zero 1Fh BYTE flags bit 6: 16-bit FAT instead of 12-bit 20h 2 BYTEs ??? 22h BYTE device type (see INT 21/AX=440Dh) 23h WORD bit flags describing drive bit 0: fixed media bit 1: door lock supported bit 2: ??? bit 3: all sectors in a track are the same size bit 4: physical drive has multiple logical units bit 5: current logical drive for physical drive bit 6: ??? bit 7: ??? bit 8: ??? 25h WORD number of cylinders 27h 25 BYTEs BIOS Parameter Block for highest capacity supported 40h 7 BYTEs ??? ---removable media--- 47h DWORD time of last access in clock ticks (FFFFFFFFh if never) ---fixed media, DOS 4.x--- 47h WORD partition (FFFFh = primary, 0001h = extended) 49h WORD absolute cylinder number of partition's start on phys drive (FFFFh if primary partition) ---fixed media, DOS 5.0--- 47h WORD ??? apparently always 0001h 49h WORD absolute cylinder number of partition's start on phys drive ------ 4Bh 11 BYTEs volume label or "NO NAME " if none (apparently taken from extended boot record rather than root directory) 56h BYTE terminating null for volume label??? 57h DWORD serial number 5Bh 8 BYTEs filesystem type ("FAT12 " or "FAT16 ") 63h BYTE terminating null for filesystem type??? ----------2F0C00----------------------------- INT 2F - AD-DOS - INSTALLATION CHECK AX = 0C00h Return: AL = FF if installed BX = 4144H ('AD') CX = 2D44H ('-D') DX = 4F53H ('OS') Notes: AD-DOS is the DOS version of the After Dark screen blanker for MS Windows AH=0Ch is the default multiplex number (there is one report of a version with AH=C0h as default) SeeAlso: AX=0C01h ----------2F0C01ES0000----------------------- INT 2F - AD-DOS - GET RESIDENT CODE SEGMENT AX = 0C01h ES = 0000h Return: CF clear succesful ES = AD-DOS TSR Code Segment CF set if failed SeeAlso: AX=0C00h ----------2F0C02----------------------------- INT 2F - AD-DOS - CHECK FOR NEW INPUT AX = 0C02h Return: BX = status 0000h no input since last check 0001h new input available Note: this call also resets the new-input flag ----------2F0C03----------------------------- INT 2F - AD-DOS - SET MINUTES TO WAIT AX = 0C03h BX = minutes to wait before blanking screen CF set Return: n/a??? Notes: AD-DOS is the DOS version of the After Dark screen blanker AH=0Ch is the default multiplex number SeeAlso: AX=0C04h ----------2F0C04----------------------------- INT 2F - AD-DOS - GET MINUTES TO WAIT AX = 0C04h CF set Return: BX = minutes to wait before blanking screen ??? SeeAlso: AX=0C03h ----------2F0C05----------------------------- INT 2F - AD-DOS - SET BLANKER STATUS AX = 0C05h BX = new state (0000h inactive, 0001h active) (default 0001h) CF set Return: n/a??? SeeAlso: AX=0C06h ----------2F0C06----------------------------- INT 2F - AD-DOS - GET BLANKER STATUS AX = 0C06h CF set Return: BX = current state of screen blanker (0000h inactive, 0001h active) Note: AD-DOS is the DOS version of the After Dark screen blanker SeeAlso: AX=0C05h ----------2F0C07----------------------------- INT 2F - AD-DOS - SET HOT KEY AX = 0C07h BX = hot key CL = hot key shift status CF set Return: n/a??? SeeAlso: AX=0C08h ----------2F0C08----------------------------- INT 2F - AD-DOS - GET CURRENT HOT KEY AX = 0C08h CF set Return: AX = status 0000h successful BX = Hot Key CL = Hot Key Shift Status 0008h otherwise SeeAlso: AX=0C07h ----------2F0C09----------------------------- INT 2F - AD-DOS - ??? AX = 0C09h Carry Set Return: AX = status 0000h successful ??? 0009h otherwise Notes: AD-DOS is the DOS version of the After Dark screen blanker AH=0Ch is the default multiplex number ----------2F0C0A----------------------------- INT 2F - AD-DOS - ??? AX = 0C0Ah CF set Return: AX = status 0000h successful BH = ?? BL = ?? 000Ah failed ----------2F0C0B----------------------------- INT 2F - AD-DOS - ??? AX = 0C0Bh CF set Return: AX = status 0000h successful 000Bh failed ----------2F0C0C----------------------------- INT 2F - AD-DOS - SET ??? INTERNAL FLAG TO 01h AX = 0C0Ch CF set Return: AX = status 0000h successful 000Ch failed Notes: AD-DOS is the DOS version of the After Dark screen blanker AH=0Ch is the default multiplex number ----------2F0C0E----------------------------- INT 2F - AD-DOS - SET PASSWORD STATUS AX = 0C0Eh BX = new state (0000h disabled, 0001h enabled) Return: ??? SeeAlso: AX=0C0Fh ----------2F0C0F----------------------------- INT 2F - AD-DOS - GET PASSWORD STATUS AX = 0C0Fh Return: BX = current state (0000h disabled, 0001h enabled) SeeAlso: AX=0C0Eh ----------2F0C20----------------------------- INT 2F - AD-DOS - GET AND RESET VxD API STATUS AX = 0C20h CF set Return: AX = status 0000h successful BX = VxD API Status 0000h no error 0001h error 0100h neither Windows 3.X enhanced mode nor Windows/386 2.x is running 0200h VM API entry point found 0020h otherwise Note: this call resets the VxD API Status to zero SeeAlso: AX=1602h,AX=1607h ----------2F1000----------------------------- INT 2F - SHARE - INSTALLATION CHECK AX = 1000h Return: AL = 00h not installed, OK to install 01h not installed, not OK to install FFh installed BUGS: values of AL other than 00h put DOS 3.x SHARE into an infinite loop (08E9: OR AL,AL 08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3) values of AL other than described here put PCDOS 4.00 into the same loop (the buggy instructions are the same) Notes: supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh if DOS 4.01 SHARE was automatically loaded, file sharing is in an inactive state (due to the undocumented /NC flag used by the autoload code) until this call is made DOS 5.0 chains to the previous handler if AL <> 00h on entry SeeAlso: AX=1080h,INT 21/AH=52h ----------2F1040----------------------------- INT 2F U - DOS 4 only SHARE internal - ??? AX = 1040h ??? Return: AL = FFh??? SeeAlso: AX=1000h ----------2F1080----------------------------- INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS AX = 1080h Return: AL = status F0h successful FFh checking was already on Note: DOS 4.x SHARE has dual functions: FCB support for large (>32M) media and file sharing checks. The undocumented commandline flag /NC can be used to disable the sharing code. SeeAlso: AX=1000h,AX=1081h ----------2F1081----------------------------- INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS AX = 1081h Return: AL = status F0h successful FFh checking was already off Note: (see AX=1080h) SeeAlso: AX=1000h,AX=1080h ----------2F10FF----------------------------- INT 2F U - Multiplex - DR-DOS 5.0 - ??? AX = 10FFh ES:BX -> ??? Note: sets pointer in kernel ----------2F1100----------------------------- INT 2F - NETWORK REDIRECTOR - INSTALLATION CHECK AX = 1100h Return: AL = 00h not installed, OK to install 01h not installed, not OK to install FFh installed Notes: called by DOS 3.1+ kernel In DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the PC LAN Program redirector; DOS 5.0 moves the calls back into the redirector ----------2F1100----------------------------- INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK AX = 1100h STACK: WORD DADAh Return: AL = 00h not installed, OK to install STACK unchanged = 01h not installed, not OK to install STACK unchanged = FFh installed STACK: WORD ADADh ----------2F1101----------------------------- INT 2F U - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY AX = 1101h SS = DOS DS SDA first filename pointer -> fully-qualified directory name SDA CDS pointer -> current directory structure for drive with dir Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: called by DOS 3.1+ kernel SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h ----------2F1102----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY AX = 1102h SS = DOS DS SDA first filename pointer -> fully-qualified directory name SDA CDS pointer -> current directory structure for drive with dir Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: appears to be identical to AX=1101h SeeAlso: AX=1101h ----------2F1103----------------------------- INT 2F U - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY AX = 1103h SS = DOS DS SDA first filename pointer -> fully-qualified directory name SDA CDS pointer -> current directory structure for drive with dir Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: called by DOS 3.1+ kernel SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h ----------2F1104----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY AX = 1104h SS = DOS DS SDA first filename pointer -> fully-qualified directory name SDA CDS pointer -> current directory structure for drive with dir Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: appears to be identical to AX=1103h SeeAlso: AX=1103h ----------2F1105----------------------------- INT 2F U - NETWORK REDIRECTOR - CHDIR AX = 1105h SS = DOS DS SDA first filename pointer -> fully-qualified directory name SDA CDS pointer -> current directory structure for drive with dir Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful CDS updated with new path Notes: called by DOS 3.1+ kernel directory string in CDS should not have a terminating backslash unless the current directory is the root SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h ----------2F1106----------------------------- INT 2F U - NETWORK REDIRECTOR - CLOSE REMOTE FILE AX = 1106h ES:DI -> SFT SFT DPB field -> DPB of drive containing file Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful SFT updated (redirector must decrement open count, which may be done with INT 2F/AX=1208h) Note: called by DOS 3.1+ kernel SeeAlso: AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh ----------2F1107----------------------------- INT 2F U - NETWORK REDIRECTOR - COMMIT REMOTE FILE AX = 1107h ES:DI -> SFT SFT DPB field -> DPB of drive containing file Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful all buffers for file flushed directory entry updated Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h ----------2F1108----------------------------- INT 2F U - NETWORK REDIRECTOR - READ FROM REMOTE FILE AX = 1108h ES:DI -> SFT SFT DPB field -> DPB of drive containing file CX = number of bytes SS = DOS DS SDA DTA field -> user buffer Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful CX = number of bytes read (0000h = end of file) SFT updated Note: called by DOS 3.1+ kernel SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h ----------2F1109----------------------------- INT 2F U - NETWORK REDIRECTOR - WRITE TO REMOTE FILE AX = 1109h ES:DI -> SFT SFT DPB field -> DPB of drive containing file CX = number of bytes SS = DOS DS SDA DTA field -> user buffer Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful CX = number of bytes written SFT updated Note: called by DOS 3.1+ kernel SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h ----------2F110A----------------------------- INT 2F U - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE AX = 110Ah BX = file handle CX:DX = starting offset SI = high word of size STACK: WORD low word of size ES:DI -> SFT SFT DPB field -> DPB of drive containing file SS = DOS DS Return: CF set on error AL = DOS error code (see INT 21/AH=59h) STACK unchanged Notes: called by DOS 3.10-3.31 kernel the redirector is expected to resolve lock conflicts SeeAlso: AX=110Bh,INT 21/AH=5Ch ----------2F110A----------------------------- INT 2F U - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE AX = 110Ah BL = function 00h lock 01h unlock DS:DX -> parameter block (see below) ES:DI -> SFT SFT DPB field -> DPB of drive containing file SS = DOS DS Return: CF set on error AL = DOS error code (see INT 21/AH=59h) Notes: called by DOS 4.0+ kernel the redirector is expected to resolve lock conflicts SeeAlso: AX=110Bh,INT 21/AH=5Ch Format of parameter block: Offset Size Description 00h DWORD start offset 04h DWORD size of region ----------2F110B----------------------------- INT 2F U - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE AX = 110Bh BX = file handle CX:DX = starting offset SI = high word of size STACK: WORD low word of size ES:DI -> SFT for file SFT DPB field -> DPB of drive containing file Return: CF set on error AL = DOS error code (see INT 21/AH=59h) STACK unchanged Note: called by DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead SeeAlso: AX=110Ah,INT 21/AH=5Ch ----------2F110C----------------------------- INT 2F U - NETWORK REDIRECTOR - GET DISK SPACE AX = 110Ch ES:DI -> current directory structure for desired drive Return: AL = sectors per cluster AH = media ID byte BX = total clusters CX = bytes per sector DX = number of available clusters Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AH=36h ----------2F110D----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 110Dh SDA first filename pointer -> name of file ??? Return: ??? Note: appears to be similar to AX=110Fh SeeAlso: AX=110Fh ----------2F110E----------------------------- INT 2F U - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES AX = 110Eh SS = DOS DS SDA first filename pointer -> fully-qualified name of file SDA CDS pointer -> current directory structure for drive with file STACK: WORD new file attributes Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful STACK unchanged Note: called by DOS 3.1+ kernel SeeAlso: AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h ----------2F110F----------------------------- INT 2F U - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE AX = 110Fh SS = DOS DS SDA first filename pointer -> fully-qualified name of file SDA CDS pointer -> current directory structure for drive with file Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful AX = file attributes BX:DI = file size Note: called by DOS 3.1+ kernel SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h ----------2F1110----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 1110h SDA first filename pointer -> name of file ??? Return: ??? Note: appears to be similar to AX=110Eh SeeAlso: AX=110Eh ----------2F1111----------------------------- INT 2F U - NETWORK REDIRECTOR - RENAME REMOTE FILE AX = 1111h SS = DS = DOS DS SDA first filename pointer = offset of fully-qualified old name SDA second filename pointer = offset of fully-qualified new name SDA CDS pointer -> current directory structure for drive with file Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AH=56h,INT 21/AH=60h ----------2F1112----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 1112h SS = DS = DOS DS SDA first filename pointer -> name of file ??? Return: ??? SeeAlso: AX=1111h ----------2F1113----------------------------- INT 2F U - NETWORK REDIRECTOR - DELETE REMOTE FILE AX = 1113h SS = DS = DOS DS SDA first filename pointer -> fully-qualified filename in DOS DS SDA CDS pointer -> current directory structure for drive with file Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Notes: called by DOS 3.1+ kernel the filespec may contain wildcards SeeAlso: INT 21/AH=41h,INT 21/AH=60h ----------2F1114----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 1114h SDA first filename pointer -> name of file ??? Return: ??? SeeAlso: AX=1113h ----------2F1115----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 1115h SS = DOS DS ES:DI -> SFT ??? ??? Return: ??? SeeAlso: AX=112Eh ----------2F1116----------------------------- INT 2F U - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE AX = 1116h ES:DI -> uninitialized SFT SS = DOS DS SDA first filename pointer -> fully-qualified name of file to open STACK: WORD file open mode (see INT 21/AH=3Dh) Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful SFT filled (except handle count, which DOS manages itself) STACK unchanged Note: called by DOS 3.1+ kernel SeeAlso: AX=1106h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh,INT 21/AH=60h ----------2F1117----------------------------- INT 2F U - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE AX = 1117h ES:DI -> uninitialized SFT SS = DOS DS SDA first filename pointer -> fully-qualified name of file to open SDA CDS pointer -> current directory structure for drive with file STACK: WORD file creation mode low byte = file attributes high byte = 00h normal create, 01h create new file Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful SFT filled (except handle count, which DOS manages itself) STACK unchanged Note: called by DOS 3.1+ kernel SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h ----------2F1118----------------------------- INT 2F U - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS AX = 1118h ES:DI -> uninitialized SFT SS = DOS DS SDA first filename pointer -> fully-qualified name of file STACK: WORD file creation mode low byte = file attributes high byte = 00h normal create, 01h create new file Return: ??? STACK unchanged Note: called by DOS 3.1+ kernel when creating a file on a drive for which the SDA CDS pointer has offset FFFFh SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h ----------2F1119----------------------------- INT 2F U - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS AX = 1119h SS = DS = DOS DS [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh) SDA first filename pointer -> fully-qualified search template SDA search attribute = attribute mask for search Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful [DTA] = updated findfirst search data (bit 7 of first byte must be set) [DTA+15h] = standard directory entry for file Notes: called by DOS 3.1+ kernel DOS 4.x IFSFUNC returns CF set, AX=0003h ----------2F111A----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 111Ah ??? Return: CF set AX = error code (03h for DOS 4.01 IFSFUNC) ----------2F111B----------------------------- INT 2F U - NETWORK REDIRECTOR - FINDFIRST AX = 111Bh SS = DS = DOS DS [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh) SDA first filename pointer -> fully-qualified search template SDA CDS pointer -> current directory structure for drive with file SDA search attribute = attribute mask for search Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful [DTA] = updated findfirst search data (bit 7 of first byte must be set) [DTA+15h] = standard directory entry for file Note: called by DOS 3.1+ kernel SeeAlso: AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h ----------2F111C----------------------------- INT 2F U - NETWORK REDIRECTOR - FINDNEXT AX = 111Ch SS = DS = DOS DS [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh) Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful [DTA] = updated findfirst search data (bit 7 of first byte must be set) [DTA+15h] = standard directory entry for file Note: called by DOS 3.1+ kernel SeeAlso: AX=111Bh,INT 21/AH=4Fh ----------2F111D----------------------------- INT 2F U - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS AX = 111Dh DS??? SS = DOS DS Return: ??? Notes: called by DOS 3.1+ kernel closes all FCBs opened by process SeeAlso: INT 21/AX=5D04h ----------2F111E----------------------------- INT 2F U - NETWORK REDIRECTOR - DO REDIRECTION AX = 111Eh SS = DOS DS STACK: WORD function to execute 5F00h get redirection mode BL = type (03h printer, 04h disk) Return: BH = state (00h off, 01h on) 5F01h set redirection mode BL = type (03h printer, 04h disk) BH = state (00h off, 01h on) 5F02h get redirection list entry BX = redirection list index DS:SI -> 16-byte local device name buffer ES:DI -> 128-byte network name buffer Return: must set user's BX to device type and CX to stored parameter value, using AX=1218h to get stack frame address 5F03h redirect device BL = device type (see INT 21/AX=5F03h) CX = stored parameter value DS:SI -> ASCIZ source device name ES:DI -> destination ASCIZ network path + ASCIZ passwd 5F04h cancel redirection DS:SI -> ASCIZ device name or network path 5F05h get redirection list extended entry BX = redirection list index DS:SI -> buffer for ASCIZ source device name ES:DI -> buffer for destination ASCIZ network path Return: BH = status flag BL = type (03h printer, 04h disk) CX = stored parameter value BP = NETBIOS local session number 5F06h similar to 5F05h??? Return: CF set on error AX = error code (see INT 21/AH=59h) STACK unchanged Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h ----------2F111F----------------------------- INT 2F U - NETWORK REDIRECTOR - PRINTER SETUP AX = 111Fh STACK: WORD function 5E02h set printer setup 5E03h get printer setup 5E04h set printer mode 5E05h get printer mode Return: CF set on error AX = error code (see INT 21/AH=59h) STACK unchanged Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h ----------2F1120----------------------------- INT 2F U - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS AX = 1120h DS = DOS DS ??? Return: CF clear (successful) Notes: called by DOS 3.1+ kernel uses CDS array pointer and LASTDRIVE= entries in DOS list of lists SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h ----------2F1121----------------------------- INT 2F U - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE AX = 1121h CX:DX = offset (in bytes) from end ES:DI -> SFT SFT DPB field -> DPB of drive with file SS = DOS DS Return: CF set on error AL = DOS error code (see INT 21/AH=59h) CF clear if successful DX:AX = new file position Note: called by DOS 3.1+ kernel SeeAlso: AX=1228h,INT 21/AH=42h ----------2F1122----------------------------- INT 2F U - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK AX = 1122h SS = DOS DS ??? Return: ??? Note: called by DOS 3.1+ kernel ----------2F1123----------------------------- INT 2F U - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME AX = 1123h DS:SI -> ASCIZ filename to canonicalize ES:DI -> 128-byte buffer for qualified name Return: CF set if not resolved Notes: called by MSDOS 3.1+ kernel, but not called by DR-DOS 5.0 unless the filename matches the name of a character device called first when DOS attempts to resolve a filename (unless inside an AX=5D00h server call); if this fails, DOS resolves the name locally SeeAlso: AX=1221h,INT 21/AH=60h ----------2F1124----------------------------- INT 2F U - NETWORK REDIRECTOR - PRINTER OFF??? AX = 1124h ES:DI -> SFT SS = DOS DS ??? Return: CX = ??? Note: called by DOS 3.1+ kernel if AX=1126h returns CF set SeeAlso: AX=1126h ----------2F1125----------------------------- INT 2F U - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE AX = 1125h STACK: WORD subfunction 5D07h get print stream state Return: DL = current state 5D08h set print stream state DL = new state 5D09h finish print job Return: CF set on error AX = error code (see INT 21/AH=59h) STACK unchanged Note: called by DOS 3.1+ kernel SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h ----------2F1126----------------------------- INT 2F U - NETWORK REDIRECTOR - PRINTER ON/OFF??? AX = 1126h ES:DI -> SFT for file handle 4??? SS = DOS DS??? ??? Return: CF set on error Notes: called by DOS 3.1+ kernel called when print echoing (^P, ^PrtSc) changes state and STDPRN has bit 11 of the device information word in the SFT set SeeAlso: AX=1124h ----------2F1127----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - UNUSED AX = 1127h Return: CF set AX = 0001h (invalid function) (see INT 21/AH=59h) ----------2F1128----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - UNUSED AX = 1128h Return: CF set AX = 0001h (invalid function) (see INT 21/AH=59h) ----------2F1129----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - UNUSED AX = 1129h Return: CF set AX = 0001h (invalid function) (see INT 21/AH=59h) ----------2F112A----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 112Ah DS = DOS DS ??? Return: ??? Note: does something to each IFS driver ----------2F112B----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL??? AX = 112Bh SS = DOS DS CX = function/category DS:DX -> parameter block STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh) ??? Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: called by DOS 4.0 kernel ----------2F112C----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 112Ch SS = DOS DS SDA current SFT pointer -> SFT for file ??? Return: CF set on error Note: called by SHARE in DOS 5.0 ----------2F112D----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 112Dh BL = subfunction (value of AL on INT 21) 04h truncate open file to zero length ES:DI -> SFT for file Return: CF clear else ??? Return: CX = ??? (00h or 02h for DOS 4.01) ES:DI -> SFT SS = DOS DS Return: DS = DOS DS Note: called by DOS 4.0 kernel on INT 21/AX=5702h,INT 21/AX=5703h, INT 21/AX=5704h ----------2F112E----------------------------- INT 2F U - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE AX = 112Eh SS = DS = DOS DS ES:DI -> uninitialized SFT for file STACK: WORD file attribute for created/truncated file low byte = file attributes high byte = 00h normal create/open, 01h create new file SDA first filename pointer -> fully-qualified filename SDA extended file open action = action code (see INT 21/AX=6C00h) SDA extended file open mode = open mode for file (see INT 21/AX=6C00h) Return: CF set on error AX = error code CF clear if successful CX = result code 01h file opened 02h file created 03h file replaced (truncated) SFT initialized (except handle count, which DOS manages itself) Note: called by DOS 4.0 kernel SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h ----------2F112F----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - ??? AX = 112Fh SS = DOS DS STACK: WORD function in low byte 00h ??? DS:SI -> Current Directory Structure??? CL = drive (1=A:) 01h ??? DS:SI -> ??? CL = file handle??? 02h ??? DS:SI -> Current Directory Structure??? DI = ??? CX = drive (1=A:) ??? Return: CF set on error AX = DOS error code (see INT 21/AH=59h) CF clear if successful Note: called by DOS 4.0 kernel SeeAlso: INT 21/AH=6Bh ----------2F1130----------------------------- INT 2F U - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT AX = 1130h Return: ES = CS of resident IFSFUNC ----------2F1186----------------------------- INT 2F - LAN Manager Enhanced DOS API - DosReadAsynchNmPipe AX = 1186h ??? Return: ??? Note: LAN Manager enhance mode adds features beyond the standard redirector file/printer services SeeAlso: AX=118Fh,INT 21/AX=5F39h ----------2F118A----------------------------- INT 2F - LAN Manager 2.0 DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE AX = 118Ah ??? Return: ??? SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh ----------2F118F----------------------------- INT 2F - LAN Manager Enhanced DOS API - DosWriteAsynchNmPipe AX = 118Fh ??? Return: ??? SeeAlso: AX=1186h,INT 21/AX=5F3Ah ----------2F1200----------------------------- INT 2F U - DOS 3+ internal - INSTALLATION CHECK AX = 1200h Return: AL = FFh (for compatibility with other INT 2F functions) ----------2F1201----------------------------- INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE AX = 1201h SS = DOS DS (must be using a DOS internal stack) SDA current SFT pointer -> SFT of file to close Return: CF set on error BX??? CX new reference count of SFT ES:DI -> SFT for file SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh ----------2F1202----------------------------- INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS AX = 1202h STACK: WORD vector number Return: ES:BX -> interrupt vector STACK unchanged ----------2F1203----------------------------- INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT AX = 1203h Return: DS = data segment of IBMDOS.COM/MSDOS.SYS Note: for DOS prior to version 5.0, the data segment is the same as the code segment ----------2F1204----------------------------- INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR AX = 1204h STACK: WORD character to normalize Return: AL = normalized character (forward slash turned to backslash, all others unchanged) ZF set if path separator STACK unchanged ----------2F1205----------------------------- INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT AX = 1205h STACK: WORD character to output Return: STACK unchanged Note: can be called only from within DOS ----------2F1206----------------------------- INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR AX = 1206h DI = error code BP:SI -> device driver header SS = DOS DS (must be using a DOS internal stack) STACK: WORD value to be passed to INT 24 in AX Return: AL = 0-3 for Abort, Retry, Ignore, Fail STACK unchanged SeeAlso: INT 24 ----------2F1207----------------------------- INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED AX = 1207h DS:DI -> disk buffer Return: nothing Desc: move the indicated buffer to the end of the disk buffer chain (least- recently used is first); under DOS 3.3, the buffer is then moved to the start of the disk buffer chain if it was marked unused Note: can be called only from within DOS SeeAlso: AX=120Fh ----------2F1208----------------------------- INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT AX = 1208h ES:DI -> SFT Return: AX = original value of reference count Notes: if the reference count was 1, it is set to FFFFh (since 0 indicates that the SFT is not in use). It is the caller's responsibility to set the reference count to zero after cleaning up. used by network redirectors such as MSCDEX SeeAlso: AX=1106h ----------2F1209----------------------------- INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER AX = 1209h DS:DI -> disk buffer Return: disk buffer marked unused, contents written to disk if buffer dirty Note: can be called only from within DOS SeeAlso: AX=120Eh,AX=1215h ----------2F120A----------------------------- INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT AX = 120Ah DS = SS = DOS DS (must be using a DOS internal stack) STACK: WORD extended error code Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail) CF clear if retry, set otherwise STACK unchanged Notes: can only be called during a DOS function call, as it uses various fields in the SDA to set up the registers for the INT 24 reportedly sets current DPB's first root directory sector to 1 SeeAlso: INT 24 ----------2F120B----------------------------- INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER AX = 120Bh ES:DI -> system file table entry for previous open of file STACK: WORD extended error code (should be 20h--sharing violation) Return: CF clear if operation should be retried CF set if operation should not be retried AX = error code (20h) (see INT 21/AH=59h) STACK unchanged Notes: can only be called during a DOS function call should only be called if an attempt was made to open an already-open file contrary to the sharing rules invokes INT 24 if SFT file opened via FCB or in compatibility mode with inheritance allowed ----------2F120C----------------------------- INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER??? AX = 120Ch SDA current SFT pointer -> SFT for file DS = DOS DS SS = DOS DS (must be using a DOS internal stack) Return: ES, DI, AX destroyed Notes: invokes "device open" call on device driver for SFT changes owner of last-accessed SFT to calling process if it was opened via FCB called by network redirectors such as MSCDEX ----------2F120D----------------------------- INT 2F U - DOS 3+ internal - GET DATE AND TIME AX = 120Dh SS = DOS DS (must be using a DOS internal stack) Return: AX = current date in packed format (see INT 21/AX=5700h) DX = current time in packed format (see INT 21/AX=5700h) SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch ----------2F120E----------------------------- INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED AX = 120Eh SS = DOS DS (must be using a DOS internal stack) Return: DS:DI -> first disk buffer Note: clears "referenced" flag on all disk buffers SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh ----------2F120F----------------------------- INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED AX = 120Fh DS:DI -> disk buffer SS = DOS DS (must be using a DOS internal stack) Return: DS:DI -> next buffer in buffer list Desc: move the indicated buffer to the end of the disk buffer chain (least- recently used is first); under DOS 3.3, the buffer is then moved to the start of the disk buffer chain if it was marked unused Note: this function is the same as AX=1207h except that it returns a pointer to the buffer following the specified buffer in the buffer chain SeeAlso: AX=1207h ----------2F1210----------------------------- INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER AX = 1210h DS:DI -> first disk buffer to check Return: ZF clear if found DS:DI -> first unreferenced disk buffer ZF set if not found SeeAlso: AX=120Eh ----------2F1211----------------------------- INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME AX = 1211h DS:SI -> ASCIZ filename to normalize ES:DI -> buffer for normalized filename Return: destination buffer filled with uppercase filename, with slashes turned to backslashes SeeAlso: AX=121Eh,AX=1221h ----------2F1212----------------------------- INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING AX = 1212h ES:DI -> ASCIZ string Return: CX = length of string SeeAlso: AX=1225h ----------2F1213----------------------------- INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER AX = 1213h STACK: WORD character to convert to uppercase Return: AL = uppercase character STACK unchanged ----------2F1214----------------------------- INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS AX = 1214h DS:SI = first pointer ES:DI = second pointer Return: ZF set if pointers are equal, ZF clear if not equal ----------2F1215----------------------------- INT 2F U - DOS 3+ internal - FLUSH BUFFER AX = 1215h DS:DI -> disk buffer SS = DOS DS (must be using a DOS internal stack) STACK: WORD drives for which to skip buffer ignore buffer if drive same as high byte, or bytes differ and the buffer is for a drive OTHER than that given in low byte Return: STACK unchanged Note: can be called only from within DOS SeeAlso: AX=1209h ----------2F1216----------------------------- INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE AX = 1216h BX = system file table entry number Return: CF clear if successful ES:DI -> system file table entry CF set if BX greater than FILES= SeeAlso: AX=1220h ----------2F1217----------------------------- INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE AX = 1217h SS = DOS DS (must be using a DOS internal stack) STACK: WORD drive (0 = A:, 1 = B:, etc) Return: CF set on error (drive > LASTDRIVE) CF clear if successful DS:SI -> current directory structure for specified drive STACK unchanged SeeAlso: AX=1219h ----------2F1218----------------------------- INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS AX = 1218h Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack) Note: only valid while within DOS ----------2F1219----------------------------- INT 2F U - DOS 3+ internal - SET DRIVE??? AX = 1219h SS = DOS DS (must be using a DOS internal stack) STACK: WORD drive (0 = default, 1 = A:, etc) Return: ??? STACK unchanged Notes: calls AX=1217h builds a current directory structure if inside server call (INT 21/AX=5D00h) SeeAlso: AX=1217h,AX=121Fh ----------2F121A----------------------------- INT 2F U - DOS 3+ internal - GET FILE'S DRIVE AX = 121Ah DS:SI -> filename Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid) DS:SI -> filename without leading X: (if present) SeeAlso: INT 21/AH=19h,INT 21/AH=60h ----------2F121B----------------------------- INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY AX = 121Bh CL = year - 1980 Return: AL = number of days in February Note: requires DS to be set to the DOS code segment SeeAlso: INT 21/AH=2Bh ----------2F121C----------------------------- INT 2F U - DOS 3+ internal - CHECKSUM MEMORY AX = 121Ch DS:SI -> start of memory to checksum CX = number of bytes DX = initial checksum SS = DOS DS (must be using a DOS internal stack) Return: AX, CX destroyed DX = checksum DS:SI -> first byte after checksummed range Note: used by DOS to determine day count since 1/1/80 given a date SeeAlso: AX=121Dh ----------2F121D----------------------------- INT 2F U - DOS 3+ internal - SUM MEMORY AX = 121Dh DS:SI -> memory to add up CX = 0000h DX = limit Return: AL = byte which exceeded limit CX = number of bytes before limit exceeded DX = remainder after adding first CX bytes DS:SI -> byte beyond the one which exceeded the limit Note: used by DOS to determine year or month given day count since 1/1/80 SeeAlso: AX=121Ch ----------2F121E----------------------------- INT 2F U - DOS 3+ internal - COMPARE FILENAMES AX = 121Eh DS:SI -> first ASCIZ filename ES:DI -> second ASCIZ filename Return: ZF set if filenames equivalent, ZF clear if not SeeAlso: AX=1211h,AX=1221h ----------2F121F----------------------------- INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE AX = 121Fh SS = DOS DS (must be using a DOS internal stack) STACK: WORD drive letter Return: ES:DI -> current directory structure (will be overwritten by next call) STACK unchanged ----------2F1220----------------------------- INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY AX = 1220h BX = file handle Return: CF set on error AL = 6 (invalid file handle) CF clear if successful ES:DI -> JFT entry for file handle in current process Note: the byte pointed at by ES:DI contains the number of the SFT for the file handle, or FFh if the handle is not open SeeAlso: AX=1216h,AX=1229h ----------2F1221----------------------------- INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME AX = 1221h DS:SI -> file name to be fully qualified ES:DI -> 128-byte buffer for resulting canonical file name SS = DOS DS (must be using a DOS internal stack) Return: (see INT 21/AH=60h) Note: identical to INT 21/AH=60h SeeAlso: AX=1123h,INT 21/AH=60h ----------2F1222----------------------------- INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO AX = 1222h SS = DOS data segment SS:SI -> 4-byte records BYTE error code, FFh = last record BYTE error class, FFh = don't change BYTE suggested action, FFh = don't change BYTE error locus, FFh = don't change SDA error code set Return: SI destroyed SDA error class, error locus, and suggested action fields set Note: can be called only from within DOS SeeAlso: AX=122Dh,INT 21/AH=59h ----------2F1223----------------------------- INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE AX = 1223h DS = DOS DS SS = DOS DS (must be using a DOS internal stack) SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name SDA+22Bh (DOS 4.0-5.0) = eight-character blank-padded name Return: CF set if no character device by that name found CF clear if found BH = low byte of device attribute word Note: can only be called from within DOS SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh ----------2F1224----------------------------- INT 2F U - DOS 3+ internal - DELAY AX = 1224h SS = DOS DS (must be using a DOS internal stack) Return: after delay set by INT 21/AX=440Bh, unless in server call (INT 21/AX=5D00h) Note: delay is dependent on the processor speed, and is skipped entirely if inside a server call SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h ----------2F1225----------------------------- INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING AX = 1225h DS:SI -> ASCIZ string Return: CX = length of string SeeAlso: AX=1212h ----------2F1226----------------------------- INT 2F U - DOS 3.3+ internal - OPEN FILE AX = 1226h CL = access mode DS:DX -> ASCIZ filename SS = DOS DS (must be using a DOS internal stack) Return: CF set on error AL = error code (see INT 21/AH=59h) CF clear if successful AX = file handle Notes: can only be called from within DOS equivalent to INT 21/AH=3Dh SeeAlso: AX=1227h,INT 21/AH=3Dh ----------2F1227----------------------------- INT 2F U - DOS 3.3+ internal - CLOSE FILE AX = 1227h BX = file handle SS = DOS DS (must be using a DOS internal stack) Return: CF set on error AL = 06h invalid file handle CF clear if successful Notes: can only be called from within DOS equivalent to INT 21/AH=3Eh SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh ----------2F1228BP4200----------------------- INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER AX = 1228h BP = 4200h, 4201h, 4202h (see INT 21/AH=42h) BX = file handle CX:DX = offset in bytes SS = DOS DS (must be using a DOS internal stack) Return: as for INT 21/AH=42h Notes: equivalent to INT 21/AH=42h, but may only be called from inside a DOS function call sets user stack frame pointer to dummy buffer, moves BP to AX, performs LSEEK, and restores frame pointer SeeAlso: INT 21/AH=42h ----------2F1229----------------------------- INT 2F U - DOS 3.3+ internal - READ FROM FILE AX = 1229h BX = file handle CX = number of bytes to read DS:DX -> buffer SS = DOS DS (must be using a DOS internal stack) Return: as for INT 21/AH=3Fh Note: equivalent to INT 21/AH=3Fh, but may only be called when already inside a DOS function call SeeAlso: AX=1226h,INT 21/AH=3Fh ----------2F122A----------------------------- INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT AX = 122Ah BX = entry point to set (0001h or 0002h) DS:SI -> FASTOPEN entry point (entry point not set if SI = FFFFh for DOS 4+) Return: CF set if specified entry point already set Notes: entry point in BX is ignored under DOS 3.30 both entry points set to same handler by DOS 4.01 DOS 3.30+ FASTOPEN is called with: AL = 01h ??? CX = ??? seems to be offset DI = ??? seems to be offset SI = offset in DOS DS of filename AL = 02h ??? AL = 03h open file??? SI = offset in DOS DS of filename AL = 04h ??? AH = subfunction (00h,01h,02h) ES:DI -> ??? CX = ??? (subfunctions 01h and 02h only) Returns: CF set on error or not installed Note: function 03h calls function 01h first PCDOS 4.01 FASTOPEN is additionally called with: AL = 04h ??? AH = 03h ??? AL = 05h ??? AL = 0Bh ??? AL = 0Ch ??? AL = 0Dh ??? AL = 0Eh ??? AL = 0Fh ??? AL = 10h ??? MSDOS 5.0 FASTOPEN is additionally called with: AL = 04h ??? AH = 03h ??? AL = 05h ??? DL = drive (00h = A:) ??? AL = 06h ??? ----------2F122B----------------------------- INT 2F U - DOS 3.3+ internal - IOCTL AX = 122Bh BP = 44xxh SS = DOS DS (must be using a DOS internal stack) additional registers as appropriate for INT 21/AX=44xxh Return: as for INT 21/AH=44h Notes: equivalent to INT 21/AH=44h, but may only be called when already inside a DOS function call sets user stack frame pointer to dummy buffer, moves BP to AX, performs IOCTL, and restores frame pointer SeeAlso: INT 21/AH=44h ----------2F122C----------------------------- INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN AX = 122Ch Return: BX:AX -> header of second device driver (NUL is first) in driver chain SeeAlso: INT 21/AH=52h ----------2F122D----------------------------- INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE AX = 122Dh Return: AX = current extended error code SeeAlso: AX=1222h,INT 21/AH=59h ----------2F122E----------------------------- INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES AX = 122Eh DL = subfunction 00h get standard DOS error table Return: ES:DI -> error table (DOS 4: errors 00h-12h,50h-5Bh) (DOS 5: errors 00h-26h,4Fh,51h-59h) 01h set standard DOS error table ES:DI -> error table 02h get parameter error table (errors 00h-0Ah) Return: ES:DI -> error table 03h set parameter error table ES:DI -> error table 04h get critical/SHARE error table (errors 13h-2Bh) Return: ES:DI -> error table 05h set critical/SHARE error table ES:DI -> error table 06h get ??? error table Return: ES:DI -> error table or 0000h:0000h 07h set ??? error table ES:DI -> error table 08h get error message retriever (see below) Return: ES:DI -> FAR procedure to fetch error message 09h set ??? error table ES:DI -> error table Notes: if the returned segment on a "get" is 0001h, then the offset specifies the offset of the error message table within COMMAND.COM, and the procedure returned by DL=08h should be called DOS 5.0 COMMAND.COM does not allow setting any of the addresses (calls with DL odd are ignored); they are always returned with segment 0001h for DOS 5.0, the standard and critical/SHARE error tables are combined into a single error table SeeAlso: AX=0500h,INT 21/AH=59h Format of DOS 4.x error table: Offset Size Description 00h BYTE FFh 01h 2 BYTEs 04h,00h (DOS version???) 03h BYTE number of error headers following 04h 2N WORDs table of all error headers for table Offset Size Description 00h WORD error message number 02h WORD offset of error message from start of header error messages are count byte followed by msg Note: DOS 5 error tables consist of one word per error number; each word contains either the offset of a counted string or 0000h Call error retrieval function with: AX = error number DI = offset of error table Return: ES:DI -> error message (counted string) Notes: this function needs to access COMMAND.COM if the messages were not loaded into memory permanently with /MSG; the caller should assume that the returned message will be overwritten by the next call of the function supported by DR-DOS 5.0 ----------2F122F----------------------------- INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN AX = 122Fh DX = DOS version number (0000h = return true DOS version) Note: not available under DR-DOS 5.0 or 6.0 SeeAlso: INT 21/AH=30h,INT 21/AX=3306h ----------2F13------------------------------- INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER AH = 13h DS:DX -> interrupt handler disk driver calls on read/write ES:BX = address to restore INT 13 to on system halt (exit from root shell) or warm boot (INT 19) Return: DS:DX from previous invocation of this function ES:BX from previous invocation of this function Notes: IO.SYS hooks INT 13 and inserts one or more filters ahead of the original INT 13 handler. The first is for disk change detection on floppy drives, the second is for tracking formatting calls and correcting DMA boundary errors, the third is for working around problems in a particular version of IBM's ROM BIOS before the first call, ES:BX points at the original BIOS INT 13; DS:DX also points there unless IO.SYS has installed a special filter for hard disk reads (on systems with model byte FCh and BIOS date "01/10/84" only), in which case it points at the special filter most DOS 3.3+ disk access is via the vector in DS:DX, although a few functions are still invoked via an INT 13 instruction this is a dangerous security loophole for any virus-monitoring software which does not trap this call (many Bulgarian viruses are known to use it to get the original ROM entry point) SeeAlso: INT 13/AH=01h,INT 19 ----------2F1400----------------------------- INT 2F - NLSFUNC.COM - INSTALLATION CHECK AX = 1400h Return: AL = 00h not installed, OK to install 01h not installed, not OK FFh installed Notes: called by DOS v3.3+ kernel supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh supported by DR-DOS 5.0 documented for MS-DOS 5.0, but undocumented in prior versions SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC" ----------2F1400----------------------------- INT 2F - European MSDOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK AX = 1400h Return: AX = FFFFh if installed BX = maximum memory required to save screen and keyboard info CF clear if successful CF set on error AX = error code 0002h invalid function 0004h unknown error Note: the POPUP interface is used by background programs (see INT 21/AH=80h) to communicate with the user SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP" ----------2F1401----------------------------- INT 2F U - NLSFUNC.COM - CHANGE CODE PAGE AX = 1401h DS:SI -> internal code page structure (see below) BX = new code page DX = country code??? Return: AL = status 00h successful else DOS error code Note: called by DOS v3.3+ kernel SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h Format of DOS 3.30 internal code page structure: Offset Size Description 00h 8 BYTEs ??? 08h 64 BYTEs name of country information file 48h WORD system code page 4Ah WORD number of supported subfunctions 4Ch 5 BYTEs data to return for INT 21/AX=6502h 51h 5 BYTEs data to return for INT 21/AX=6504h 56h 5 BYTEs data to return for INT 21/AX=6505h 5Bh 5 BYTEs data to return for INT 21/AX=6506h 60h 41 BYTEs data to return for INT 21/AX=6501h ----------2F1401----------------------------- INT 2F - European MSDOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN AX = 1401h DL = function (00h open, 01h close) DH = wait flag 00h block until screen opens 01h return error if screen is not available 02h urgent--always open screen immediately Return: CF clear if successful BX = amount of memory needed to save screen and keyboard info, 0000h if default save location can be used (only if DH was 02h) CF set on error Note: the application using the screen is frozen until the popup screen is closed SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP" ----------2F1402----------------------------- INT 2F U - NLSFUNC.COM - GET COUNTRY INFO AX = 1402h BP = subfunction (same as AL for INT 21/AH=65h) BX = code page DX = country code DS:SI -> internal code page structure (see AX=1401h) ES:DI -> user buffer CX = size of user buffer Return: AL = status 00h successful else DOS error code Notes: called by DOS v3.3+ kernel on INT 21/AH=65h code page structure apparently only needed for COUNTRY.SYS pathname SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h ----------2F1402----------------------------- INT 2F - European MSDOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN AX = 1402h ES:DI -> save buffer (0000h:0000h for default buffer in POPUP) Return: CF clear if successful CF set on error AX = error code 0001h process does not own screen 0004h unknown error 0005h invalid pointer SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP" ----------2F1403----------------------------- INT 2F U - NLSFUNC.COM - SET COUNTRY INFO AX = 1403h DS:SI -> internal code page structure (see AX=1401h) BX = code page DX = country code Return: AL = status ??? Note: called by DOS v3.3+ kernel on INT 21/AH=38h SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET" ----------2F1403----------------------------- INT 2F - European MSDOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN AX = 1403h ES:DI -> buffer containing saved screen (0000h:0000h for default buffer in POPUP) Return: CF clear if successful CF set on error AX = error code (see AX=1402h"POPUP") SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP" ----------2F1404----------------------------- INT 2F U - NLSFUNC.COM - GET COUNTRY INFO AX = 1404h BX = code page DX = country code DS:SI -> internal code page structure (see AX=1401h) ES:DI -> user buffer Return: AL = status ??? Notes: called by DOS v3.3+ kernel on INT 21/AH=38h code page structure apparently only needed for COUNTRY.SYS pathname SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET" ----------2F14FE----------------------------- INT 2F U - DR-DOS 5.0 NLSFUNC - ??? AX = 14FEh DI = ??? ??? Return: ??? Note: DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh, or FFh on entry. SeeAlso: AX=14FFh ----------2F14FF----------------------------- INT 2F U - DR-DOS 5.0 NLSFUNC - ??? AX = 14FFh ??? Return: ??? Note: DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh, or FFh on entry. SeeAlso: AX=14FEh ----------2F1500----------------------------- INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK AX = 1500h Return: AX = FFFFh ES:DI -> ??? (graphics data?) Note: this installation check conflicts with the CD-ROM Extensions installation check; moved to AX=AC00h in later versions SeeAlso: AX=AC00h ----------2F1500BX0000----------------------- INT 2F - CD-ROM - INSTALLATION CHECK AX = 1500h BX = 0000h Return: BX = number of CD-ROM drive letters used CX = starting drive letter (0=A:) Notes: this installation check DOES NOT follow the format used by other software this installation check conflicts with the DOS 4.00 GRAPHICS.COM installation check SeeAlso: INT 2F/AX=D000h"Lotus" ----------2F1501----------------------------- INT 2F - CD-ROM - GET DRIVE DEVICE LIST AX = 1501h ES:BX -> buffer to hold drive letter list (5 bytes per drive letter) Return: buffer filled, for each drive letter BYTE subunit number in driver DWORD address of device driver header ----------2F1502----------------------------- INT 2F - CD-ROM - GET COPYRIGHT FILE NAME AX = 1502h ES:BX -> 38-byte buffer for name of copyright file CX = drive number (0=A:) Return: CF set if drive is not a CD-ROM drive AX = 15 (invalid drive) CF clear if successful SeeAlso: AX=1503h ----------2F1503----------------------------- INT 2F - CD-ROM - GET ABSTRACT FILE NAME AX = 1503h ES:BX -> 38-byte buffer for name of abstract file CX = drive number (0=A:) Return: CF set if drive is not a CD-ROM drive AX = 15 (invalid drive) CF clear if successful SeeAlso: AX=1502h ----------2F1504----------------------------- INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME AX = 1504h ES:BX -> 38-byte buffer for name of bibliographic documentation file CX = drive number (0=A:) Return: CF set if drive is not a CD-ROM drive AX = 15 (invalid drive) CF clear if successful ----------2F1505----------------------------- INT 2F - CD-ROM - READ VTOC AX = 1505h ES:BX -> 2048-byte buffer CX = drive number (0=A:) DX = sector index (0=first volume descriptor,1=second,...) Return: CF set on error AX = error code (15=invalid drive,21=not ready) CF clear if successful AX = volume descriptor type (1=standard,FFh=terminator,0=other) ----------2F1506----------------------------- INT 2F - CD-ROM - TURN DEBUGGING ON AX = 1506h BX = debugging function to enable Note: reserved for development SeeAlso: AX=1507h ----------2F1507----------------------------- INT 2F - CD-ROM - TURN DEBUGGING OFF AX = 1507h BX = debugging function to disable Note: reserved for development SeeAlso: AX=1506h ----------2F1508----------------------------- INT 2F - CD-ROM - ABSOLUTE DISK READ AX = 1508h ES:BX -> buffer CX = drive number (0=A:) SI:DI = starting sector number DX = number of sectors to read Return: CF set on error AL = error code (15=invalid drive,21=not ready) CF clear if successful SeeAlso: AX=1509h ----------2F1509----------------------------- INT 2F - CD-ROM - ABSOLUTE DISK WRITE AX = 1509h ES:BX -> buffer CX = drive number (0=A:) SI:DI = starting sector number DX = number of sectors to write Note: corresponds to INT 26h and is currently reserved and nonfunctional SeeAlso: AX=1508h ----------2F150A----------------------------- INT 2F - CD-ROM - RESERVED AX = 150Ah ----------2F150B----------------------------- INT 2F - CD-ROM v2.00+ - DRIVE CHECK AX = 150Bh CX = drive number (0=A:) Return: BX = ADADh if MSCDEX.EXE installed AX = 0000h if drive not supported nonzero if supported SeeAlso: AX=150Dh ----------2F150C----------------------------- INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION AX = 150Ch Return: BH = major version BL = minor version Note: MSCDEX.EXE versions prior to 2.00 return BX=0 ----------2F150D----------------------------- INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS AX = 150Dh ES:BX -> buffer for drive letter list (1 byte per drive) Return: buffer filled with drive numbers (0=A:). Each byte corresponds to the drive in the same position for function 1501h SeeAlso: AX=150Bh ----------2F150E----------------------------- INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE AX = 150Eh BX = subfunction 00h get preference DX = 0000h Return: DX = preference settings 01h set preference DH = volume descriptor preference 01h = primary volume descriptor 02h = supplementary volume descriptor DL = supplementary volume descriptor preference 01h = shift-Kanji CX = drive number (0=A:) Return: CF set on error AX = error code (15=invalid drive,1=invalid function) CF clear if successful ----------2F150F----------------------------- INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY AX = 150Fh CL = drive number (0=A:) CH bit 0 = copy flag clear if direct copy set if copy to structure which removed ISO/High Sierra diffs ES:BX -> ASCIZ path name SI:DI -> buffer for directory entry (see below) minimum 255 bytes for direct copy Return: CF set on error AX = error code CF clear if succesful AX = disk format (0=High Sierra,1=ISO 9660) Format of directory entry (direct copy): Offset Size Description 00h BYTE length of directory entry 01h BYTE length of XAR in Logical Block Numbers 02h DWORD LBN of data, Intel (little-endian) format 06h DWORD LBN of data, Motorola (big-endian) format 0Ah DWORD length of file, Intel format 0Eh DWORD length of file, Motorola format ---High Sierra--- 12h 6 BYTEs date and time 18h BYTE bit flags 19h BYTE reserved ---ISO 9660--- 12h 7 BYTEs date and time 19h BYTE bit flags ---both formats--- 1Ah BYTE interleave size 1Bh BYTE interleave skip factor 1Ch WORD volume set sequence number, Intel format 1Eh WORD volume set sequence number, Motorola format 20h BYTE length of file name 21h N BYTEs file name BYTE (optional) padding if filename is odd length N BYTEs system data Format of directory entry (canonicalized): Offset Size Description 00h BYTE length of XAR in Logical Block Numbers 01h DWORD Logical Block Number of file start 05h WORD size of disk in logical blocks 07h DWORD file length in bytes 0Bh 7 BYTEs date and time 12h BYTE bit flags 13h BYTE interleave size 14h BYTE interleave skip factor 15h WORD volume set sequence number 17h BYTE length of file name 18h 38 BYTEs ASCIZ filename 3Eh WORD file version number 40h BYTE number of bytes of system use data 41h 220 BYTEs system use data ----------2F1510----------------------------- INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST AX = 1510h CX = CD-ROM drive letter (0 = A, 1 = B, etc) ES:BX -> CD-ROM device driver request header (see AX=0802h) ----------2F1600----------------------------- INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE INSTALLATION CHECK AX = 1600h Return: AL = 00h if Windows 3.x enhanced mode or Windows/386 2.x not running AL = 80h if Windows 3.x enhanced mode or Windows/386 2.x not running AL = 01h if Windows/386 2.x running AL = FFh if Windows/386 2.x running AL = anything else AL = Windows major version number >= 3 AH = Windows minor version number Note: INT 2F/AH=16h comprises an API for non-Windows programs (DOS device drivers, TSRs, and applications) to cooperate with multitasking Windows/386 2.x and Windows 3.x and higher enhanced mode. certain calls are also supported in the Microsoft 80286 DOS extender in Windows standard mode SeeAlso: AX=4680h ----------2F1602----------------------------- INT 2F - MS WINDOWS/386 2.x - GET API ENTRY POINT AX = 1602h Return: ES:DI -> Windows/386 2.x API procedure entry point Notes: this interface is supported in Windows 3.x only for 2.x compatibility to get the current virtual machine (VM) ID in Windows/386 2.x: AX = 0000h ES:DI -> return address JUMP to address returned from INT 2F/AX=1602h After JUMP, at return address: BX = current VM ID. SeeAlso: AX=0C20h ----------2F1603----------------------------- INT 2F - RM Nimbus MSDOS 3.3 - ??? AX = 1603h Return: AX = 5248h ('RH') DS:SI -> first byte after INT 2F handler in IBMBIO.COM ----------2F1605----------------------------- INT 2F - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST AX = 1605h ES:BX = 0000h:0000h DS:SI = 0000h:0000h CX = 0000h DX = flags bit 0 = 0 if Windows enhanced-mode initialization bit 0 = 1 if Microsoft 286 DOS extender initialization bits 1-15 reserved (undefined) DI = version number (major in upper byte, minor in lower) Return: CX = 0000h if okay for Windows to load CX <> 0 if Windows should not load ES:BX -> startup info structure (see below) DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h Notes: the Windows enhanced mode loader and Microsoft 286 DOS extender will broadcast an INT 2F/AX=1605h call when initializing. Any DOS device driver or TSR can watch for this broadcast and return the appropriate values. If the driver or TSR returns CX <> 0, it is also its responsibility to display an error message. each handler must first chain to the prior INT 2F handler with registers unchanged before processing the call if the handler requires local data on a per-VM basis, it must store the returned ES:BX in the "next" field of a startup info structure and return a pointer to that structure in ES:BX a single TSR may set the V86 mode enable/disable callback; if DS:SI is already nonzero, the TSR must fail the initialization by setting CX nonzero SeeAlso: AX=1606h,AX=1608h,AX=4B05h Format of Startup Information Structure: Offset Size Description 00h 2 BYTEs major, minor version of info structure 02h DWORD pointer to next startup info structure or 0000h:0000h 06h DWORD pointer to ASCIZ name of virtual device file or 0000h:0000h 0Ah DWORD virtual device reference data (only used if above nonzero) 0Eh DWORD pointer to instance data records or 0000h:0000h Format of one Instance Item in array: Offset Size Description 00h DWORD address of instance data (end of array if 0000h:0000h) 04h WORD size of instance data Virtual mode enable/disable procedure called with: AX = 0000h disable V86 mode AX = 0001h enable V86 mode interrupts disabled Return: CF set on error CF clear if successful interrupts disabled ----------2F1606----------------------------- INT 2F - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST AX = 1606h DX = flags bit 0 = 0 if Windows enhanced-mode exit bit 0 = 1 if Microsoft 286 DOS extender exit bits 1-15 reserved (undefined) Notes: if the init broadcast fails (AX=1605h returned CX <> 0), then this broadcast will be issued immediately. this call will be issued in real mode SeeAlso: AX=1605h,AX=1609h ----------2F1607----------------------------- INT 2F - MS WINDOWS - VIRTUAL DEVICE CALL OUT API AX = 1607h BX = virtual device ID (see INT 2F/AX=1684h) CX = (usually) callout subfunction Return: (usually) AX,BX,CX,DX,ES contain results Notes: more of a convention than an API, this call specifies a standard mechanism for Windows enhanced-mode virtual devices (VxD's) to talk to DOS device drivers and TSRs see below for details on several virtual devices SeeAlso: AX=0C20h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h SeeAlso: AX=1607h/BX=0015h,AX=1684h ----------2F1607BX000C----------------------- INT 2F - MS WINDOWS - "VMD" VIRTUAL DEVICE API AX = 1607h BX = 000Ch (VxD identifier of "VMD") Return: CX = nonzero if mouse driver already virtualized Note: VMD (Virtual Mouse Driver) calls this and then checks whether CX is nonzero; if yes, it will not automatically virtualize the mouse driver. This would be used if MOUSE.COM already virtualizes itself using the Windows API. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h ----------2F1607BX0014----------------------- INT 2F - MS WINDOWS - "VNETBIOS" VIRTUAL DEVICE API AX = 1607h BX = 0014H (VxD identifier of "VNETBIOS") Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS command code (see below) Note: VNETBIOS (Virtual NetBIOS) calls this function to determine whether the NetBIOS has an extensions Windows should know about SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0015h Values for action code: 00h "VN_Unknown" unknown command 04h "VN_No_Map" no memory mapping necessary 08h "VN_Map_In" input buffer is quickly used, so no global mapping needed 0Ch "VN_Map_In" output buffer is quickly used, so no global mapping needed 10h "VN_Map_In_Out" buffer is quickly used, so no global mapping needed 14h "VN_Chain_Send" the chain-send command 18h "VN_Cancel" special case for cancel command 1Ch "VN_Buffer_In" buffer is incoming 20h "VN_Buffer_Out" buffer is outgoing 24h "VN_Buffer_In_Out" buffer used for both incoming and outgoing data ----------2F1607BX0015----------------------- INT 2F - MS WINDOWS - "DOSMGR" VIRTUAL DEVICE API AX = 1607h BX = 0015h (VxD identifier of "DOSMGR") CX = function 0000h query instance processing Return: CX = state 0000h not instanced other instanced (DOS 5.0 kernel returns 0001h) DX = segment of DOS drivers (unchanged if call handled by DOS 5.0) ES:BX -> patch table (see below) 0001h set patches in DOS DX = bit mask of patch requests bit 0 enable critical sections bit 1 NOP setting/checking user ID bit 2 turn INT 21/AH=3Fh on STDIN into polling loop bit 3 trap stack fault in "SYSINIT" to WIN386 bit 4 BIOS patch to trap "Insert disk X:" to WIN386 Return: AX = B97Ch BX = bit mask of patches applied DX = A2ABh 0002h remove patches in DOS (ignored by DOS 5.0 kernel) DX = bit mask of patch requests (see function 0001h) 0003h get size of DOS data structures DX = bit mask of request (only one bit can be set) bit 0: Current Directory Structure size Return: if supported request: AX = B97Ch CX = size in bytes of requested structure DX = A2ABh else: all registers preserved 0004h determine instanced data structures Return: AX = B97Ch if supported DX = A2ABh if supported (DOS 5.0 kernel returns 0000h) BX = bit mask of instanced items bit 0: CDS bit 1: SFT bit 2: device list bit 3: DOS swappable data area 0005h get device driver size ES = segment of device driver Return: DX:AX = 0000h:0000h on error (not dev. driver segment) DX:AX = A2ABh:B97Ch if successful BX:CX = size of device driver in bytes Notes: the DOS 5.0 kernel provides these calls; earlier versions require a separate driver DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has been instanced via INT 2F/AX=1605h and will not perform its own instancing of the normal DOS/BIOS data if so SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h Format of patch table: Offset Size Description 00h WORD number of items in patch table 02h N WORDs offsets of ??? to be patched ----------2F1607BX22C0----------------------- INT 2F - Rational Systems DOS/4GW - ??? AX = 1607h BX = 22C0h ??? Return: ??? SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h ----------2F1608----------------------------- INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST AX = 1608h Notes: called after all installable devices have been initialized real-mode software may be called between the Windows enhanced-mode init call (AX=1605h) and this call; the software must detect this situation SeeAlso: AX=1605h,AX=1609h ----------2F1609----------------------------- INT 2F - MS WINDOWS - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST AX = 1609h Note: called at the beginning of a normal exit sequence; not made in the event of a fatal system crash SeeAlso: AX=1606h,AX=1608h ----------2F160A----------------------------- INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE AX = 160Ah ??? Return: ??? ----------2F160B----------------------------- INT 2F - MS Windows 3.1 - IDENTIFY TSRs AX = 160Bh ??? Return: ??? Format of TSR-to-Windows communication structure: Offset Size Description 00h DWORD pointer to next structure 04h WORD PSP segment 06h WORD API version ID (0100h) 08h WORD EXEC flags bit 0: "WINEXEC" bit 1: "LOADLIBRARY" bit 2: "OPENDRIVER" 0Ah WORD "exec_cmd_show" 0Ch DWORD "exec_cmd" 10h 4 BYTEs reserved (0) 14h DWORD TSR ID block 18h DWORD TSR data block ----------2F160C----------------------------- INT 2F - MS Windows 3.1 - DETECT ROMs AX = 160Ch ??? Return: ??? Note: used by ROM Windows ----------2F1680----------------------------- INT 2F - MS WINDOWS, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE AX = 1680h Return: AL = 00h if the call is supported AL = 80h (unchanged) if the call is not supported Notes: programs can use this function in idle loops to enhance performance under multitaskers; this call is supported by MS Windows 3.0, DOS 5+, DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS applications does not block the program; it just gives up the remainder of the time slice should not be used by Windows-specific programs SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah ----------2F1681----------------------------- INT 2F - MS WINDOWS 3+ - BEGIN CRITICAL SECTION AX = 1681h Notes: used to prevent a task switch from occurring should be followed by an INT 2F/AX=1682h call as soon as possible nested calls are allowed, and must be followed by an appropriate number of "end critical section" calls not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and and increment by hand. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h ----------2F1682----------------------------- INT 2F - MS WINDOWS 3+ - END CRITICAL SECTION AX = 1682h Notes: not supported in Windows/386 2.x. Get InDOS flag with INT 21/AH=34h and decrement by hand, taking care not to decrement InDOS flag through zero SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h ----------2F1683----------------------------- INT 2F - MS WINDOWS 3+ - GET CURRENT VIRTUAL MACHINE ID AX = 1683h Return: BX = current virtual machine (VM) ID Notes: Windows itself currently runs in VM 1, but this can't be relied upon VM IDs are reused when VMs are destroyed an ID of 0 will never be returned SeeAlso: AX=1684h,AX=1685h,AX=168Bh ----------2F1684----------------------------- INT 2F - MS WINDOWS - GET DEVICE API ENTRY POINT AX = 1684h BX = virtual device (VxD) ID (see below) ES:DI = 0000h:0000h Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API Note: some Windows enhanced-mode virtual devices provide services that applications can access. For example, the Virtual Display Device (VDD) provides an API used in turn by WINOLDAP. SeeAlso: AX=1683h Values for VxD ID: 01h VMM Virtual Machine Manager 02h Debug 03h VPICD Virtual Prog. Interrupt Controller (PIC) Device 04h VDMAD Virtual Direct Memory Access (DMA) Device 05h VTD Virtual Timer Device 06h V86MMGR Virtual 8086 Mode Device 07h PAGESWAP Paging Device 08h Parity 09h Reboot 0Ah VDD Virtual Display Device (GRABBER) 0Bh VSD Virtual Sound Device 0Ch VMD Virtual Mouse Device 0Dh VKD Virtual Keyboard Device 0Eh VCD Virtual COMM Device 0Fh VPD Virtual Printer Device 10h VHD Virtual Hard Disk Device 11h VMCPD 12h EBIOS Reserve EBIOS page (e.g., on PS/2) 13h BIOSXLAT Map ROM BIOS API between prot & V86 mode 14h VNETBIOS Virtual NetBIOS Device 15h DOSMGR 16h WINLOAD 17h SHELL 18h VMPoll 19h VPROD 1Ah DOSNET assures network integrity across VMs 1Bh VFD Virtual Floppy Device 1Ch VDD2 Secondary display adapter 1Dh WINDEBUG 1Eh TSRLoad TSR instance utility Note: The high bit of the VxD ID is reserved for future use. The next 10 bits are the OEM # which is assigned by Microsoft. The low 5 bits are the device number. Call VTD.386 entry point with: AX = 0000h get VTD version number Return: AH = major version AL = minor version AX = 0100h get current clock tick time Return: EDX:EAX = clock tick time in 840ns units since Windows was started AX = 0101h get current system time in milliseconds Return: EAX = time in milliseconds that Windows has been running AX = 0102h get current virtual machine time Return: EAX = cumulative amount of time the virtual machine has been active, in milliseconds Note: should only be called directly when TOOLHELP.DLL TimerCount() cannot be called ----------2F1685----------------------------- INT 2F - MS WINDOWS - SWITCH VMs AND CALLBACK AX = 1685h BX = VM ID of virtual machine to switch to CX = flags bit 0 wait until interrupts enabled bit 1 wait until critical section unowned bits 2-15 reserved (zero) DX:SI = priority boost (see VMM.INC) ES:DI -> FAR procedure to callback Return: CF set on error AX = error code 01h invalid VM ID 02h invalid priority boost 03h invalid flags CF clear if successful event will be or has been called Notes: some DOS devices, such as networks, need to call functions in a specific VM. This call forces the appropriate VM to be installed. the callback procedure must preserve all registers and return with IRET SeeAlso: AX=1683h,INT 15/AX=1117h ----------2F1686----------------------------- INT 2F - DOS Protected-Mode Interface - DETECT MODE AX = 1686h Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available) AX nonzero if in real/V86 mode or no DPMI (INT 31 not available) SeeAlso: AX=1687h ----------2F1687----------------------------- INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK AX = 1687h Return: AX = 0000h if installed BX = flags bit 0: 32-bit programs supported CL = processor type (02h=80286, 03h=80386, 04h=80486) DH = DPMI major version DL = two-digit DPMI minor version SI = number of paragraphs of DOS extender private data ES:DI -> DPMI mode-switch entry point AX nonzero if not installed SeeAlso: AX=1686h,INT 38/AH=10h Call mode switch entry point with: AX = flags bit 0: set if 32-bit program ES = real mode segment of buffer for DPMI private data (ignored if SI was zero) Return: CF set on error program still in real mode AX = error code (DPMI 1.0+) 8011h unable to allocate all necessary descriptors 8021h 32-bit program specified, but 16-bit DPMI host CF clear if successful CS = 16-bit selector corresponding to real-mode CS SS = selector corresponding to real-mode SS (64K limit) DS = selector corresponding to real-mode DS (64K limit) ES = selector to program's PSP (100h byte limit) FS = GS = 0 high word of ESP = 0 if 32-bit program program now in protected mode Note: this entry point is only called for the initial switch to protected mode ----------2F1688----------------------------- INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET SELECTOR TO LDT AX = 1688h Return: AX = status??? (0000h for 386MAX) BX = selector for ??? ----------2F1689----------------------------- INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL AX = 1689h ??? Return: ??? ----------2F168A----------------------------- INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT AX = 168Ah DS:(E)SI = selector:offset of ASCIZ vendor name Return: AL = status 00h successful ES:(E)DI -> extended API entry point 8Ah unsuccessful Notes: the vendor name is used to determine which entry point to return; it is case-sensitive available in protected mode only 32-bit applications use ESI and EDI, 16-bit applications use SI and DI this call is present but not documented for DPMI 0.9 SeeAlso: INT 31/AX=0A00h Vendor names: "MS-DOS" ??? and 386MAX v6.00+ "386MAX" 386MAX v6.00+ ----------2F168B----------------------------- INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE AX = 168Bh ??? Return: ??? SeeAlso: AX=1683h ----------2F168C----------------------------- INT 2F - MS Windows 3.1 - RESTART COMMAND AX = 168Ch ??? Return: ??? Note: WIN.COM executes specified application ----------2F1700----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - IDENTIFY WinOldAp VERSION AX = 1700h Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard AX <> 1700h AL = WINOLDAP major version AH = WINOLDAP minor version Notes: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting "old" (character-mode) application access to Dynamic Data Exchange, menus, and the Windows clipboard. this installation check DOES NOT follow the format used by other software ----------2F1701----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - OPEN CLIPBOARD AX = 1701h Return: AX <> 0 success AX = 0 clipboard is already open ----------2F1702----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - EMPTY CLIPBOARD AX = 1702h Return: AX <> 0 clipboard has been emptied AX = 0 failure ----------2F1703----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - SET CLIPBOARD DATA AX = 1703h DX = clipboard format supported by WinOldAp: 01h text 02h bitmap 03h metafile picture 04h SYLK 05h DIF 06h TIFF 07h OEM text ES:BX -> data (see below) SI:CX = size of data Return: AX <> 0 data copied into the Clipboard AX = 0 failure Format of bitmap: Offset Size Description 00h WORD type (0000h) 02h WORD width of bitmap in pixels 04h WORD height of bitmap in pixels 06h WORD bytes per line 08h BYTE number of color planes 09h BYTE number of adjacent color bits in pixel 0Ah DWORD pointer to start of data 0Eh WORD width in 0.1mm units 10h WORD height in 0.1mm units 12h N BYTEs bitmap data Format of metafile picture: Offset Size Description 00h WORD mapping mode 02h WORD X extent 04h WORD Y extent 06h WORD picture data ----------2F1704----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA SIZE AX = 1704h DX = clipboard format supported by WinOldAp (see AX=1703h) Return: DX:AX = size of data in bytes, including any headers Failure: DX:AX = 0 no data in this format in the Clipboard ----------2F1705----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA AX = 1705h DX = clipboard format supported by WinOldAp (see AX=1703h) ES:BX -> buffer Return: AX <> 0 success AX = 0 error, or no data in this format in Clipboard ----------2F1708----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - CloseClipboard AX = 1708h Return: AX <> 0 success AX = 0 failure ----------2F1709----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - COMPACT CLIPBOARD AX = 1709h SI:CX = desired size in bytes Return: DX:AX = number of bytes in largest block of free memory Note: WinOldAp is responsible for including the size of any headers ----------2F170A----------------------------- INT 2F - MS WINDOWS "WINOLDAP" - GET DEVICE CAPABILITIES AX = 170Ah DX = GDI information index 00h device driver version 02h device classification 04h width in mm 06h height in mm 08h width in pixels 0Ah height in pixels 0Ch bits per pixel 0Eh number of bit planes 10h number of brushes supported by device 12h number of pens supported by device 14h number of markers supported by device 16h number of fonts supported by device 18h number of colors 1Ah size required for device descriptor 1Ch curve capabilities 1Eh line capabilities 20h polygon capabilities 22h text capabilities 24h clipping capabilities 26h bitblt capabilities 28h X aspect 2Ah Y aspect 2Ch length of hypotenuse of aspect 58h logical pixels per inch of width 5Ah logical pixels per inch of height Return: AX = integer value of the desired item device classification 00h vector plotter 01h raster display 02h raster printer 03h raster camera 04h character-stream, PLP 05h Metafile, VDM 06h display-file curve capabilities bit 0 circles bit 1 pie wedges bit 2 chord arcs bit 3 ellipses bit 4 wide lines bit 5 styled lines bit 6 wide styled lines bit 7 interiors line capabilities bit 1 polylines bit 2 markers bit 3 polymarkers bit 4 wide lines bit 5 styled lines bit 6 wide styled lines bit 7 interiors polygon capabilities bit 0 polygons bit 1 rectangles bit 2 trapezoids bit 3 scanlines bit 4 wide borders bit 5 styled borders bit 6 wide styled borders bit 7 interiors text capabilities bit 0 output precision character bit 1 output precision stroke bit 2 clippping precision stroke bit 3 90-degree character rotation bit 4 arbitrary character rotation bit 5 independent X and Y scaling bit 6 double-size bit 7 integer scaling bit 8 continuous scaling bit 9 bold bit 10 italic bit 11 underline bit 12 strikeout bit 13 raster fonts bit 14 vector fonts bit 15 reserved clipping capabilities 00h none 01h clipping to rectangles raster capabilities bit 0 simple bitBLT bit 1 device requires banding support bit 2 device requires scaling support bit 3 supports >64K bitmap Note: This function returns the device-capability bits for the given display ----------2F1900----------------------------- INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK AX = 1900h Return: AL = 00h not installed FFh installed ----------2F1901BL00------------------------- INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE AX = 1901h BL = 00h if SHELLC transient 01h if SHELLC resident DS:DX -> far call entry point for resident SHELLC.EXE Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM Note: SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell ----------2F1902----------------------------- INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE AX = 1902h ES:DI -> ASCIZ full filename of current batch file, with at least the final filename element uppercased DS:DX -> buffer for results Return: AL = 00h failed, either (a) final filename element quoted at ES:DI does not match identity of shell batch file quoted as parameter of most recent call of SHELLB command, or (b) no more Program Start Commands available. AL= FFh success, then: memory at DS:[DX+1] onwards filled as: DX+1: BYTE count of bytes of PSC DX+2: N BYTEs Program Start Command text BYTE 0Dh terminator Explanation: COMMAND.COM executes the result of this call in preference to reading a command from a batch file. Thus the batch file does not advance in execution for so long as SHELLB provides PSCs from its workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user menu interface. The final PSC of a sequence is finished with a GOTO COMMON, which causes a loop back in the batch file which called SHELLC so as to execute SHELLC again. The check on batch file name permits PSCs to CALL nested batch files while PSCs are still stacked up for subsequent execution. ----------2F1903----------------------------- INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface AX = 1903h ES:DI -> ASCIZ batch file name as for AX=1902h Return: AL = FFh if quoted batch file name matches last SHELLB parameter AL = 00h if it does not ----------2F1904----------------------------- INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface AX = 1904h Return: ES:DI -> name of current shell batch file: WORD number of bytes of name following BYTEs (8 max) uppercase name of shell batch file ----------2F1A00----------------------------- INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK AX = 1A00h Return: AL = FFh if installed Notes: AVATAR.SYS also responds to this call documented for DOS 5+, but undocumented for DOS 4.x ----------2F1A00BX4156----------------------- INT 2F - AVATAR.SYS - INSTALLATION CHECK AX = 1A00h BX = 4156h ('AV') CX = 4154h ('AT') DX = 4152h ('AR') Return: AL = FFh if installed CF clear BX = AVATAR protocol level supported CX = driver type 0000h AVATAR.SYS 4456h DVAVATAR.COM inside DESQview window DX = 0016h Notes: AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from the magic values AVATAR.SYS is a CON replacement by George Adam Stanislav which interprets AVATAR command codes in the same way that ANSI interprets ANSI command codes ----------2F1A01----------------------------- INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION AX = 1A01h CL = function 7Fh for GET 5Fh for SET DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively Return: CF set on error AX = error code (many non-standard) CF clear if successful AX destroyed Note: presumably this is the DOS IOCTL interface to ANSI.SYS SeeAlso: AX=1A02h,INT 21/AX=440Ch ----------2F1A02----------------------------- INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS AX = 1A02h DS:DX -> parameter block (see below) Note: DOS 5.0 chains to previous handler if AL > 02h on call SeeAlso: AX=1A01h Format of parameter block: Offset Size Description 00h BYTE subfunction 00h set/reset interlock 01h get /L flag 01h BYTE interlock state 00h=reset, 01h=set This interlock prevents some of the ANSI.SYS post-processing in its hook onto INT 10, AH=00h mode set 02h BYTE (returned) 00h if /L not in effect 01h if /L in effect ----------2F1A21----------------------------- INT 2F - AVATAR.SYS - SET DRIVER STATE AX = 1A21h (AL='!') DS:SI -> command string with one or more state characters CX = length of command string Return: CF set on error (invalid subfunction) CF clear if successful Note: the characters in the state string are interpreted left to right, and need not be in any particular order SeeAlso: AX=1A3Fh Values of state characters: 'a' activate driver 'd' disable driver 'f' use fast screen output 'g' always convert gray keys (+ and -) to function keys 'G' never convert gray keys 'l' convert gray keys only when ScrollLock active 's' use slow screen output 't' Tandy 1000 keyboard (not yet implemented) ----------2F1A3C----------------------------- INT 2F U - AVATAR.SYS v0.11 - ??? AX = 1A3Ch ??? Return: CX = 0000h ----------2F1A3E----------------------------- INT 2F U - AVATAR.SYS v0.11 - ??? AX = 1A3Eh CL = ??? CH = ??? DL = ??? DH = ??? Return: CL = ??? CH = ??? DL = ??? DH = ??? ----------2F1A3F----------------------------- INT 2F - AVATAR.SYS - QUERY DRIVER STATE AX = 1A3Fh (AL='?') ES:DI -> buffer CX = length of buffer in bytes Return: CF clear CX = actual size of returned info Note: the returned information consists of multiple letters whose meanings are described under AX=1A21h SeeAlso: AX=1A21h ----------2F1A42BX4156----------------------- INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER AX = 1A42h BX = 4156h ('AV') ES:DI -> FAR handler for serial port using IRQ3 DS = data segment needed by handler Return: AX = 1A42h if ASD not installed = 0000h if no more room else handle to use when uninstalling Notes: the handler need not save/restore registers or signal EOI to the interrupt controller the handler should return AX=0000h if the interrupt was meant for it, and either leave AX unchanged or return a non-zero value otherwise the most recently installed handler will be called first, continuing to earlier handlers until one returns AX=0000h SeeAlso: AX=1A43h,AX=1A62h ----------2F1A43BX4156----------------------- INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER AX = 1A43h BX = 4156h ('AV') ES:DI -> FAR handler for serial port using IRQ4 DS = data segment needed by handler Return: AX = 1A43h if ASD not installed = 0000h if no more room else handle to use when uninstalling Notes: (see AX=1A42h) SeeAlso: AX=1A42h,AX=1A63h ----------2F1A44BX4156----------------------- INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT AX = 1A44h BX = 4156h ('AV') Return: AX = 0000h DS = data segment CX = size of data segment Note: AVATAR.SYS calls this function whenever it is invoked. If each process under a multitasker hooks this function and provides a separate data segment, AVATAR.SYS becomes fully reentrant. SeeAlso: AX=1A21h,AX=1A3Fh ----------2F1A52----------------------------- INT 2F U - AVATAR.SYS v0.11 - GET ??? AX = 1A52h CX = size of buffer ES:DI -> buffer Return: ??? copied into user buffer Note: the maximum size of the data which may be copied is returned by AX=1A72h SeeAlso: AX=1A72h ----------2F1A53----------------------------- INT 2F U - AVATAR.SYS v0.11 - ??? AX = 1A53h CL = ??? (00h-05h) ??? Return: ??? ----------2F1A62BX4156----------------------- INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER AX = 1A62h BX = 4156h ('AV') CX = handle for IRQ routine returned by AX=1A42h SeeAlso: AX=1A42h,AX=1A63h ----------2F1A63BX4156----------------------- INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER AX = 1A63h BX = 4156h ('AV') CX = handle for IRQ routine returned by AX=1A43h SeeAlso: AX=1A43h,AX=1A62h ----------2F1A72----------------------------- INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE AX = 1A72h Return: CX = maximum size of ??? SeeAlso: AX=1A52h ----------2F1A7B----------------------------- INT 2F U - AVATAR.SYS v0.11 - ??? AX = 1A7Bh Return: AX = 0000h CX = 0000h ----------2F1A7D----------------------------- INT 2F U - AVATAR.SYS v0.11 - ??? AX = 1A7Dh Return: AX = ??? ----------2F1AADDX0000----------------------- INT 2F U - AVATAR.SYS v0.11 - ??? AX = 1AADh DX = 0000h CX = subfunction (00h-0Ch) ??? Return: AX = 0000h if DX was nonzero ??? ----------2F1B00----------------------------- INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK AX = 1B00h Return: AL = FFh if installed Note: XMA2EMS.SYS extension is only installed if DOS has page frames to hide. This extension hooks onto INT 67/AH=58h and returns from that call data which excludes the physical pages being used by DOS. SeeAlso: AH=1Bh"FRAME INFO" ----------2F1B------------------------------- INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION AH = 1Bh AL <> 00h DI = hidden physical page number Return: AX = FFFFh if failed (no such hidden page) AX = 0000h if OK, then ES = segment of page frame DI = physical page number Notes: this corresponds to the data edited out of the INT 67/AH=58h call FASTOPEN makes this call with AL = FFh SeeAlso: AX=1B00h ----------2F2300----------------------------- INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK AX = 2300h Return: AH = FFh Note: this installation check does not follow the usual format SeeAlso: AH=23h ----------2F23------------------------------- INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA AH = 23h AL nonzero Return: AH = FFh ES:BX -> graphics data SeeAlso: AX=2300h ----------2F2700----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK AX = 2700h Return: AL = 00h not installed = FFh installed ----------2F2701----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS AX = 2701h Return: AX = maximum simultaneous tasks BX = index into TASK_IDS of current foreground task CX = currently-active tasks DX = version number (DR-DOS 6.0 = 0001h) ES:SI -> TASK_IDS ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars) Notes: do not attempt to create a new task if CX == AX the task's index is its position on the task menu, while its ID is the position within the internal task name table SeeAlso: AX=2714h,AX=2716h ----------2F2702----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT AX = 2702h Return: DX = maximum pages INT 67/AH=42h will report available Note: TaskMAX does not limit EMS allocations other than by limiting the amount which is reported as being available at a given time SeeAlso: AX=2703h,INT 67/AH=42h ----------2F2703----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT AX = 2703h DX = maximum pages INT 67/AH=42h should report available Return: DX = new maximum for reporting SeeAlso: AX=2702h,INT 67/AH=42h ----------2F2704----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER AX = 2704h DL = subfunction 00h unregister task manager 01h register task manager Return: DL = status 00h registered 01h unregistered Notes: a task manager replaces TaskMAX's menu system with its own user interface; while one is registered, the TaskMAX hotkeys and Ctrl-Alt-Del invoke the manager rather than the built-in menu system unregister the task manager before terminating it SeeAlso: AX=2705h ----------2F2705----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING AX = 2705h DL = subfunction 00h disable keystrokes for switching to next/prev/specified task 01h enable Return: nothing Note: should only be called by a registered task manager (see AX=2704h) SeeAlso: AX=2704h,AX=2706h ----------2F2706----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK AX = 2706h DX = task index (see AX=2701h) of task to be activated Return: DX = task index of previously-active task SeeAlso: AX=2705h,AX=2707h,AX=2715h ----------2F2707----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK AX = 2707h DS:DX -> ASCIZ pathname of executable ES:BX -> parameter block (see below) CX = number of ticks before automatic return to task manager (0000h = run until termination or explicitly switched) Return: DX = new task's task index (FFFFh if task terminated) SeeAlso: AX=2706h,AX=2708h Format of parameter block: Offset Size Description 00h WORD reserved, should be 0000h 02h DWORD pointer to command tail to be copied into child's PSP 06h DWORD pointer to first FCB to be copied into child's PSP 0Ah DWORD pointer to second FCB to be copied into child's PSP ----------2F2708----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK AX = 2708h DX = task index Return: DX = FFFFh (task deleted) Notes: this call should only be used for abnormal task termination, after first checking for open files with AX=270Ch; should not be used with programs that allocate EMS or XMS memory switches to specified task first SeeAlso: AX=2707h ----------2F2709----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK AX = 2709h DX = task index DS:SI -> 8-byte name (8 NULs = remove name) Return: AL = task flags 00h ID unused or task terminated 01h ID in use, task name table entry valid 81h ID in use, task name fixed BX = task ID ES:DI -> name in task name table (see AX=2701h) Note: the task retains the given name until it terminates or the name is removed by specifying a name of 8 NULs. SeeAlso: AX=2701h,AX=2707h ----------2F270A----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID AX = 270Ah DX = task index Return: DX = task ID (FFFFh if index invalid) Note: task IDs stay constant, while indexes can change when other tasks are deleted SeeAlso: AX=2701h,AX=270Bh ----------2F270B----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX AX = 270Bh DX = task ID Return: DX = task index (FFFFh if task not active) SeeAlso: AX=270Ah ----------2F270C----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES AX = 270Ch DX = task index Return: AX = number of files currently open for specified task SeeAlso: AX=2708h ----------2F270D----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER AX = 270Dh DX = task index Return: DX = status 0000h if primary command interpreter (COMMAND.COM, etc.) running 0001h if not in root shell for task Note: TaskMAX will return 0001h if the specified task has spawned another command interpreter with AX=2707h SeeAlso: AX=2707h,AX=270Ch ----------2F270E----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN AX = 270Eh CX = length of string (max 15 keystrokes, 0000h to get current string) DS:SI -> pasting lead-in string (character/scan-code pairs) Return: ES:DI -> current lead-in string Note: the specified sequence of keystrokes is sent to the application before every line of a text-mode spreadsheet paste SeeAlso: AX=270Fh,AX=2710h,AX=2713h ----------2F270F----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN AX = 270Fh CX = length of string (max 15 keystrokes, 0000h to get current string) DS:SI -> pasting lead-in string (character/scan-code pairs) Return: ES:DI -> current lead-in string Note: the specified sequence of keystrokes is sent to the application before every number in a numeric-mode spreadsheet paste SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h ----------2F2710----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING AX = 2710h CX = length of string (max 15 keystrokes, 0000h to get current string) DS:SI -> pasting lead-in string (character/scan-code pairs) Return: ES:DI -> current lead-in string Note: the specified sequence of keystrokes is sent to the application after every line of a spreadsheet paste operation SeeAlso: AX=270Eh,AX=270Fh,AX=2713h ----------2F2711----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT AX = 2711h DX = ASCII code for separator (FFFFh to get current) Return: DL = current separator character SeeAlso: AX=270Fh ----------2F2712----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA AX = 2712h DX = task index ----------2F2713----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION AX = 2713h DX = task index CX = past mode 0000h alphanumeric 0001h numeric 0002h text SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h ----------2F2714----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO AX = 2714h Return: CX = total KB of swap space DX = available KB of swap space SeeAlso: AX=2701h ----------2F2715----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER AX = 2715h Return: only after calling task is again selected SeeAlso: AX=2706h ----------2F2716----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS AX = 2716h Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported CX = bytes in paste buffer DX = current generation number (updated after every copy operation) SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h ----------2F2717----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER AX = 2717h CX = bytes in destination buffer ES:DI -> destination buffer Return: AX = 0000h if function supported CX = bytes actually copied (FFFFh if buffer too small) DX = current generation number for paste buffer Note: the destination buffer may be too small if another task adds more data to the paste buffer after the AX=2716h call but before this call SeeAlso: AX=2713h,AX=2716h,AX=2718h ----------2F2718----------------------------- INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER AX = 2718h CX = bytes in source buffer DS:SI -> source buffer (plain ASCII, lines terminated with CR LF) Return: AX = 0000h if function supported CX = bytes actually copied DX = current generation number for paste buffer SeeAlso: AX=2712h,AX=2716h,AX=2717h ----------2F2A------------------------------- INT 2F - Gammafax DOS Dispatcher INTERFACE AH = 2Ah Note: details not available at this time SeeAlso: AX=8000h"FaxBIOS",AX=C000h"MTEZ",AX=CB00h,AX=CBDDh,INT 66"BitFax" ----------2F3900----------------------------- INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE AX = 3900h Return: AL = status 00h not installed FFh one or more TSRs using this interface is installed Note: this function is provided to that the multiplex number will appear used to other programs SeeAlso: AH=39h/BL=00h ----------2F39--BL00------------------------- INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK AH = 39h BL = 00h AL = TSR ID number (01h-FFh, currently only 01h-0Eh used) (see below) Return: AL = status 00h not installed FFh installed DX = segment address of resident module Note: All of Kingswood Software's TSRs use this interface. Usually the resident module is installed by allocating a block of upper memory, setting its owner ID to 0008h (DOS data), and filling the MCB name field with the TSR's name. SeeAlso: AX=3900h,AH=39h/BL=01h Values for TSR ID number: 01h TSR Windows 02h NOBUSY 03h CD STACK 04h DISK WATCH 05h PUSHBP 06h ALIAS 07h KEYMACRO 08h SLOWDOWN 09h ANSIGRAB 0Ah TEE 0Bh FASTMOUS 0Ch EXTWILD 0Dh BREAKOUT 0Eh STOPDISK Format of TSR modules: Offset Size Description 00h 4 BYTEs signature "FTSR" 04h WORD segment address of this module 06h WORD number of words to skip (usually 0000h if no PSP present) 08h N WORDs module-defined data that must be at a fixed segment offset (usually only a PSP if file access is required) 5N BYTEs interrupt list (see below) BYTE FFh terminator Format of interrupt list entry: Offset Size Description 00h BYTE interrupt number (00h-FEh) 01h WORD offset within segment of DWORD pointer to previous interrupt 03h WORD offset within segment of begin of interrupt handler code ----------2F39--BL01------------------------- INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK AH = 39h BL = 01h AL = TSR ID number (01h-FFh) (see AH=39h/BL=00h) Return: AL = status 00h not ready to be removed FFh resident module may be removed by deassigning the interrupts hooked by the TSR and deallocating the TSR's memory block AH,BX,CX,DX,ES may be destroyed SeeAlso: AX=3900h,AH=39h/BL=00h ----------2F39------------------------------- INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS AH = 39h BL = function number (02h-FFh) AL = TSR ID number (01h-FFh) CX,DX,SI,DI,DS,ES may contain parameters Return: as appropriate for the called function SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h ----------2F3901BL02------------------------- INT 2F - Kingswood TSR Windows - OPEN WINDOW AX = 3901h BL = 02h Return: AX = error code (0000h if successful) Notes: opens the next TSR window on top of any others. Only three TSR windows can be opened at any one time. The three windows are all 40x11 characters, partly overlapping. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h ----------2F3901BL03------------------------- INT 2F - Kingswood TSR Windows - HIDE WINDOWS AX = 3901h BL = 03h Return: AX = error code (0000h if successful) Notes: Hide any visible TSR windows from view. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h ----------2F3901BL04------------------------- INT 2F - Kingswood TSR Windows - SHOW WINDOWS AX = 3901h BL = 04h Return: AX = error code (0000h if successful) Notes: Re-display all TSR windows after a HIDE WINDOWS call. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h ----------2F3901BL05------------------------- INT 2F - Kingswood TSR Windows - CLOSE WINDOW AX = 3901h BL = 05h Return: AX = error code (0000h if successful) Notes: Close the last opened TSR window. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h ----------2F3901BL06------------------------- INT 2F - Kingswood TSR Windows - SET WINDOW TITLE AX = 3901h BL = 06h DS:SI -> title string Return: AX = error code (0000h if successful) SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h ----------2F3901BL07------------------------- INT 2F - Kingswood TSR Windows - POSITION CURSOR AX = 3901h BL = 07h CH = Y coordinate (0-10) CL = X coordinate (0-39) Return: AX = error code (0000h if successful) Note: the hardware cursor is always disabled when a TSR window is opened; this call only sets a text position SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h ----------2F3901BL08------------------------- INT 2F - Kingswood TSR Windows - DISPLAY STRING AX = 3901h BL = 08h DS:SI -> string Return: AX = error code (0000h if successful) Notes: The text is not clipped. This routine understands Tab, NewLine and Carriage Return SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h ----------2F3901BL09------------------------- INT 2F - Kingswood TSR Windows - SCROLL WINDOW AX = 3901h BL = 09h CL = scroll direction: 00h up, FFh down, 00h clear window Return: AX = error code (0000h if successful) SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h ----------2F3901BL0A------------------------- INT 2F - Kingswood TSR Windows - SOUND BEEPER AX = 3901h BL = 0Ah DX = sound divisor, or 0 for silence. (divide 1843200 by required frequency to get value for DX) CL = sound length in 18.2 Hz clock ticks Return: AX = error code (0000h if successful) SeeAlso: AH=39h/BL=00h ----------2F3901BL0B------------------------- INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER AX = 3901h BL = 0Bh CL = number of users increment: +1 if adding a new user -1 if removing a user Return: AX = error code (0000h if successful) Note: the TSR windows resident module may only be removed when the internal user count is zero SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h ----------2F4000----------------------------- INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES AX = 4000h Return: AL = 01h does not virtualize video access 02h virtualizes the video when in text mode 03h virtualizes the video when in text mode or single plane graphics modes 04h virtualizes the video when in text mode, single plane graphics modes, and VGA multiplane modes FFh virtualizes the video fully Note: this function is used by display drivers to find out what capabilities exist for the VDD driver and also trigger then VDD driver to call functions 4005h and 4006h. This function also gives the Video Driver hardware access to the video registers. ----------2F4001----------------------------- INT 2F - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND AX = 4001h Note: called by OS/2 when the DOS box is about to be placed in the background and the video driver should save any necessary state SeeAlso: AX=4002h,AX=4005h ----------2F4002----------------------------- INT 2F - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND AX = 4002h Note: called by OS/2 when the DOS box is about to be placed in the foreground and the video driver should restore the previously-saved state SeeAlso: AX=4001h,AX=4006h ----------2F4003----------------------------- INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION AX = 4003h Note: This critical section must be exited within 1 second. SeeAlso: AX=4004h ----------2F4004----------------------------- INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION AX = 4004h SeeAlso: AX=4003h ----------2F4005----------------------------- INT 2F - Windows 3.x - SWITCHING DOS TO BACKGROUND AX = 4005h Note: called by Windows when the DOS box is about to be placed in the background and the video driver should save any necessary state information SeeAlso: AX=4001h,AX=4006h ----------2F4006----------------------------- INT 2F - Windows 3.x - SWITCHING DOS TO FOREGROUND AX = 4006h Note: called by Windows when the DOS box is about to be placed in the foreground and the video driver should restore any necessary state information SeeAlso: AX=4002h,AX=4005h ----------2F4007----------------------------- INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS AX = 4007h ----------2F4040----------------------------- INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ??? AX = 4040h Return: BX:CX -> ??? ----------2F41------------------------------- INT 2F - LAN Manager 2.0 DOS Enhanced NETPOPUP.EXE - NETWORK POP-UP SERVICE AH = 41h ??? Return: ??? Note: LAN Manager enhanced mode adds features beyond the standard redirector file/printer services SeeAlso: AX=118Ah,AH=42h,AH=4Bh ----------2F42------------------------------- INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE AH = 42h ??? Return: ??? Note: LAN Manager enhanced mode adds features beyond the standard redirector file/printer services SeeAlso: AX=118Ah,AH=41h,AH=4Bh ----------2F4300----------------------------- INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - INSTALLATION CHECK AX = 4300h Return: AL = 80h XMS driver installed AL <> 80h no driver Notes: XMS gives access to extended memory and noncontiguous/nonEMS memory above 640K this installation check DOES NOT follow the format used by other software SeeAlso: AX=4310h ----------2F4310----------------------------- INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - GET DRIVER ADDRESS AX = 4310h Return: ES:BX -> driver entry point Note: HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h SeeAlso: AX=4300h Perform a FAR call to the driver entry point with AH set to the function code AH function 00h Get XMS version number Return: AX = XMS version (in BCD, AH=major, AL=minor) BX = internal revision number DX = 0001h if HMA (1M to 1M + 64K) exists 0000h if HMA does not exist 01h Request High Memory Area (1M to 1M + 64K) DX = memory in bytes (for TSR or device drivers) FFFFh if application program Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,90h,91h,92h) (see below) 02h Release High Memory Area Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,90h,93h) (see below) 03h Global enable A20, for using the HMA Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,82h) (see below) 04h Global disable A20 Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,82h,94h) (see below) 05h Local enable A20, for direct access to extended memory Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,82h) (see below) 06h Local disable A20 Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,82h,94h) (see below) 07h Query A20 state Return: AX = 0001h enabled = 0000h disabled BL = error code (00h,80h,81h) (see below) 08h Query free extended memory, not counting HMA BL = 00h (some implementations leave BL unchanged on success) Return: AX = size of largest extended memory block in K DX = total extended memory in K BL = error code (00h,80h,81h,A0h) (see below) 09h Allocate extended memory block DX = Kbytes needed Return: AX = 0001h success DX = handle for memory block = 0000h failure BL = error code (80h,81h,A0h) (see below) 0Ah Free extended memory block DX = handle of block to free Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,A2h,ABh) (see below) 0Bh Move extended memory block DS:SI -> EMM structure (see below) Note: if either handle is 0000h, the corresponding offset is considered to be an absolute segment:offset address in directly addressable memory Return: AX = 0001h success = 0000h failure BL = error code (80h-82h,A3h-A9h) (see below) 0Ch Lock extended memory block DX = handle of block to lock Return: AX = 0001h success DX:BX = 32-bit linear address of locked block = 0000h failure BL = error code (80h,81h,A2h,ACh,ADh) (see below) 0Dh Unlock extended memory block DX = handle of block to unlock Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,A2h,AAh) (see below) 0Eh Get handle information DX = handle for which to get info Return: AX = 0001h success BH = block's lock count BL = number of free handles left DX = block size in K = 0000h failure BL = error code (80h,81h,A2h) (see below) 0Fh Reallocate extended memory block DX = handle of block BX = new size of block in K Return: AX = 0001h success = 0000h failure BL = error code (80h,81h,A0h-A2h,ABh) (see below) 10h Request upper memory block (nonEMS memory above 640K) DX = size of block in paragraphs Return: AX = 0001h success BX = segment address of UMB DX = actual size of block = 0000h failure BL = error code (80h,B0h,B1h) (see below) DX = largest available block 11h Release upper memory block DX = segment address of UMB to release Return: AX = 0001h success = 0000h failure BL = error code (80h,B2h) (see below) 12h (XMS v3.0) Reallocate upper memory block DX = segment address of UMB to resize BX = new size of block in paragraphs Return: AX = 0001h success = 0000h failure BL = error code (80h,B0h,B2h) (see below) 34h (QEMM 5.11 only, undocumented) ??? 44h (QEMM 5.11 only, undocumented) ??? 88h (XMS v3.0) Query free extended memory Return: EAX = largest block of extended memory, in K BL = status 00h success 80h not implemented (i.e. on a 286 system) 81h VDISK detected A0h all extended memory allocated ECX = physical address of highest byte of memory (valid even on error codes 81h and A0h) EDX = total Kbytes of extended memory (0 if status A0h) 89h (XMS v3.0) Allocate any extended memory EDX = Kbytes needed Return: AX = 0001h success DX = handle for allocated block (free with AH=0Ah) = 0000h failure BL = status (80h,81h,A0h,A1h,A2h) (see below) 8Eh (XMS v3.0) Get extended EMB handle information DX = handle Return: AX = 0001h success BH = block's lock count CX = number of free handles left EDX = block size in K = 0000h failure BL = status (80h,81h,A2h) (see below) 8Fh (XMS v3.0) Reallocate any extended memory block DX = unlocked handle EBX = new size in K Return: AX = 0001h success = 0000h failure BL = status (80h,81h,A0h-A2h,ABh) (see below) Notes: HIMEM.SYS requires at least 256 bytes free stack space the XMS driver need not implement functions 10h through 12h to be considered compliant with the standard Format of EMM structure: Offset Size Description 00h DWORD number of bytes to move (must be even) 04h WORD source handle 06h DWORD offset into source block 0Ah WORD destination handle 0Ch DWORD offset into destination block Notes: if source and destination overlap, only forward moves (source base less than destination base) are guaranteed to work properly if either handle is zero, the corresponding offset is interpreted as a real-mode address referring to memory directly addressable by the processor Error codes returned in BL: 00h successful 80h function not implemented 81h Vdisk was detected 82h an A20 error occurred 8Eh a general driver error 8Fh unrecoverable driver error 90h HMA does not exist 91h HMA is already in use 92h DX is less than the /HMAMIN= parameter 93h HMA is not allocated 94h A20 line still enabled A0h all extended memory is allocated A1h all available extended memory handles are allocated A2h invalid handle A3h source handle is invalid A4h source offset is invalid A5h destination handle is invalid A6h destination offset is invalid A7h length is invalid A8h move has an invalid overlap A9h parity error occurred AAh block is not locked ABh block is locked ACh block lock count overflowed ADh lock failed B0h only a smaller UMB is available B1h no UMB's are available B2h UMB segment number is invalid ----------2F44------------------------------- INT 2F U - ??? AH = 44h AL = function (at least 0Bh, 15h, 17h) ??? Return: ??? Note: called by Codeview for Windows SeeAlso: AH=86h ----------2F4500----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK AX = 4500h Return: AL = 01h if PROF.COM installed AL = 02h if VPROD.386 installed SeeAlso: AX=4501h,AX=4502h ----------2F4501----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER AX = 4501h BX = CSIPS buffer size in KB (first parameter for ProfSetup) CX = output limit in KB (second parameter for ProfSetup) Note: this call is not supported by PROF.COM SeeAlso: AX=4502h,AX=4503h ----------2F4502----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE AX = 4502h BL = sampling rate for PROF.COM (0 < BL <= 13) (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s) CX = sampling rate for VPROD.386 Note: for PROF.COM, this programs the CMOS clock by setting BL+2 as the low four bits of CMOS register 0Ah. The interruption rate is 1 SHL (15 - BL) per second. SeeAlso: AX=4501h,AX=4503h ----------2F4503----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING AX = 4503h Notes: Profiling is also turned on by the key combinations LeftShift + RightShift + Alt LeftShift + RightShift + Ctrl for PROF.COM, this call programs the CMOS clock by reading register 0Ch, and setting bit 6 of register 0Bh. It then makes sure that IRQ8 is unmasked SeeAlso: AX=4504h ----------2F4504----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING AX = 4504h Notes: profiling is also turned off by the key combination LeftShift + RightShift for PROF.COM, this programs the CMOS clock by reading register 0Ch and clearing bit 6 of register 0Bh. It then masks IRQ8. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h ----------2F4505----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA AX = 4505h SeeAlso: AX=4503h,AX=4504h,AX=4506h ----------2F4506----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush" AX = 4506h SeeAlso: AX=4505h,AX=4507h ----------2F4507----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish" AX = 4507h Note: this call is essentially a "ProfStop" (AX=4504h) followed by "ProfFlush" (AX=4506h) SeeAlso: AX=4504h,AX=4505h,AX=4506h ----------2F4508----------------------------- INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE AX = 4508h BX = ordinal (or 0000h) CX = segment DX = instance (or 0000h) SI = type (or 0000h) ES:DI -> ASCIZ module name Notes: this call is an alternate entry to the profiler's SEGDEBUG interface, but only to function 0, for notifying the profiler of each new segment loaded. The SHOWHITS utility then examines the profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction with symbol files to provide information in a useful form. this call does not have a corresponding Windows function SeeAlso: AX=4500h ----------2F4601----------------------------- INT 2F U - DOS 5.0 kernel - ??? AX = 4601h Return: ??? Note: copies the MCB following the caller's PSP memory block into DOS data segment SeeAlso: AX=4602h ----------2F4602----------------------------- INT 2F U - DOS 5.0 kernel - ??? AX = 4602h Return: ??? Note: copies previously copied MCB from DOS data segment into MCB following caller's PSP memory block SeeAlso: AX=4601h ----------2F46------------------------------- INT 2F U - ??? AH = 46h AL = subfunction (03h,04h) Return: ??? Note: these two subfunctions are called by MS Windows 3.0 ----------2F4653CX0002----------------------- INT 2F - F-PROT v1.x only - F-LOCK.EXE AX = 4653h CX = 0002h BX = subfunction 0000h installation check Return: AX = FFFFh 0001h uninstall Return: AX,BX,ES destroyed 0002h disable (v1.08 and below only) 0003h enable (v1.08 and below only) Note: F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik Skulason SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh ----------2F4653CX0003----------------------- INT 2F - F-PROT v1.x only - F-XCHK.EXE AX = 4653h CX = 0003h BX = subfunction 0000h installation check Return: AX = FFFFh 0001h uninstall Return: AX,BX,ES destroyed Note: F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik Skulason SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h ----------2F4653CX0004----------------------- INT 2F - F-PROT v1.x only - F-POPUP.EXE AX = 4653h CX = 0004h BX = subfunction 0000h installation check Return: AX = FFFFh 0001h uninstall Return: AX,BX,ES destroyed 0002h disable (v1.08 and below only) display message (v1.14+) other registers: ??? 0003h enable (v1.08 and below only) display message (v1.14+) other registers: ??? Return: AX = key pressed by user Note: F-POPUP is part of the F-PROT virus/trojan protection package by Fridrik Skulason SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h ----------2F4653CX0005----------------------- INT 2F - F-PROT v1.x only - F-DLOCK.EXE AX = 4653h CX = 0005h BX = subfunction 0000h installation check Return: AX = FFFFh 0001h uninstall Return: AX,BX,ES destroyed Note: F-DLOCK is part of the F-PROT virus/trojan protection package by Fridrik Skulason SeeAlso: AX=4653h/CX=0004h,AX=CA00h ----------2F4680----------------------------- INT 2F - MS Windows v3.0 - INSTALLATION CHECK AX = 4680h Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode, or DOS 5 DOSSHELL active nonzero no Windows, Windows prior to 3.0, or Windows3 in enhanced mode Note: not officially documented, but Microsoft has indicated that they intend to provide an installation check which works in all modes SeeAlso: AX=1600h ----------2F4800----------------------------- INT 2F - DOS v5.0 DOSKEY - INSTALLATION CHECK AX = 4800h Return: AL = nonzero if installed SeeAlso: AX=4810h ----------2F4810----------------------------- INT 2F - DOS v5.0 DOSKEY - READ INPUT LINE FROM CONSOLE AX = 4810h DS:DX -> line buffer (see INT 21/AH=0Ah) Return: AX = 0000h if successful Notes: the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to the previous handler if the user's input is a macro name, no text is placed in the buffer even though AX=0000h on return; the program must immediately issue this call again to retrieve the expansion of the macro. Similarly, if the user enters a special parameter such as $*, this call must be repeated to retrieve the expansion; on the second call, DOSKEY overwrites the macro name on the screen with its expansion. SeeAlso: AX=4800h,INT 21/AH=0Ah ----------2F4A00CX0000----------------------- INT 2F U - DOS v5.0 - SINGLE-FLOPPY LOGICAL DRIVE CHANGE NOTIFICATION AX = 4A00h CX = 0000h DH = new drive number DL = current drive number Return: CX = FFFFh to skip "Insert diskette for drive X:" message Note: called by MSDOS 5.00 IO.SYS just before displaying the message "Insert diskette for drive X:" on single-floppy systems ----------2F4A01----------------------------- INT 2F - DOS 5.0 - QUERY FREE HMA SPACE AX = 4A01h Return: BX = number of bytes available in HMA (0000h if DOS not using HMA) ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA) Note: called by Windows 3.1 DOSX.EXE SeeAlso: AX=4310h,AX=4A02h ----------2F4A02----------------------------- INT 2F - DOS 5.0 - ALLOCATE HMA SPACE AX = 4A02h BX = number of bytes Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh BX destroyed Notes: this call is not valid unless DOS is loaded in the HMA (DOS=HIGH) called by Windows 3.1 DOSX.EXE SeeAlso: AX=4A01h ----------2F4A05----------------------------- INT 2F U - DOS 5.0 DOSSHELL - TASK SWITCHING API??? AX = 4A05h SI = function 0000h reset??? 0001h ??? 0002h ??? 0003h ??? 0004h ??? BL = ??? 0005h ??? 0006h get ??? Return: ES:DI -> ??? 0007h get ??? Return: AX = ??? 0008h get ??? Return: DX:AX -> ??? 0009h get ??? Return: ES = ??? 000Ah ??? BL = ??? ES:DI -> ??? 000Bh get ??? Return: AX = ??? 000Ch ??? BL = ??? Return: DX:AX -> ??? Notes: DOSSHELL chains to the previous handler if SI is not one of the values listed above the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls SeeAlso: AX=4B01h ----------2F4A06----------------------------- INT 2F U - ??? - GET MEMORY SIZE AX = 4A06h DX = segment following last byte of conventional memory Return: DX = segment following last byte of memory available for use by DOS Note: called by MSDOS 5.00 IO.SYS startup code if the signature "RPL" is present three bytes beyond the INT 2F handler; this call overrides the value returned by INT 12 SeeAlso: INT 12 ----------2F4A10----------------------------- INT 2F - SMARTDRV v4.00+ - API AX = 4A10h BX = command 0000h installation check and hit ratios Return: AX = BABEh if installed DX:BX = cache hits DI:SI = cache misses CX = ??? BP = version (4.00 = 0400h) 0001h reset cache 0002h flush buffers 0003h status BP = drive # (0=A, 1=B, etc.) DL = subfunction 00h only get information 01h turn on read cache 02h turn off read cache 03h turn on write cache 04h turn off write cache Return: AX = BABEh if OK DL = status bit 7 not cached bit 6 write-through bit 5 ??? bits 0-4 drive # (0=A, 1=B...) DL = FFh if drive does not exist Note: If the read cache is off, reads will not be cached, but writes will continue to be cached if the write- cache is enabled. 0004h cache size Return: AX = ??? BX = largest number of elements CX = size of elements in bytes DX = number of elements under Windows 0005h double-buffer status BP = drive # (0=A, 1=B...) Return: AX = BABEh if double-buffered 0007h ??? Return: DI = random number??? 000Ah get table pointer??? Return: ES:BX -> table of about 10 bytes or 5 words. Seems to be words pointing to memory addresses containing info??? (see below) 1234h signal serious error pops up a message box saying that a serious error occurred and to hit R to retry. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV" Format of data table: Offset Size Description 00h 8 BYTEs ??? 08h WORD offset of WORD containing number of elements in cache ----------2F4B------------------------------- INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR AH = 4Bh ??? Return: ??? Note: LAN Manager enhanced mode adds features beyond the standard redirector file/printer services SeeAlso: AX=118Ah,AH=41h,AH=42h ----------2F4B01----------------------------- INT 2F - DOS v5.0 TASK SWITCHER - BUILD CALLOUT CHAIN AX = 4B01h CX:DX -> task switcher entry point (see AX=4B02h) ES:BX = 0000h:0000h Return: ES:BX -> callback info structure (see below) or 0000h:0000h Notes: called by the task switcher this function is hooked by clients which require notification of task switcher activities; the call must first be passed on to the prior handler with registers unchanged using a simulated interrupt. On return, the client must build a callback info structure and store the returned ES:BX in the "next" field, then return the address of its own callback info structure. a client program must add itself to the notification chain if it provides services to other programs; before terminating, it must remove itself from the chain by calling the task switcher's entry point with AX=0005h (see AX=4B02h) the task switcher entry point should not be saved, as it is subject to change and will be provided on any notification call the Windows 3.1 Standard Mode supports this API SeeAlso: AX=4B02h Format of callback info structure: Offset Size Description 00h DWORD pointer to next callback info structure 04h DWORD pointer to notification function (see below) 08h DWORD reserved 0Ch DWORD address of zero-terminated list of API info structures (see AX=4B02h) Notification function is called with: AX = function 0000h switcher initialization Return: AX = 0000h if OK to load = nonzero to abort task switcher 0001h query suspend BX = session ID Return: AX = 0000h if OK to switch session = 0001h if not 0002h suspend session BX = session ID interrupts disabled Return: AX = 0000h if OK to switch session = 0001h if not 0003h activate session BX = session ID CX = session status flags bit 0: set if first activation of session bits 1-15: reserved (0) interrupts disabled Return: AX = 0000h 0004h session active BX = session ID CX = session status flags bit 0: set if first activation of session bits 1-15: reserved (0) Return: AX = 0000h 0005h create session BX = session ID Return: AX = 0000h if OK to create session = 0001h if not 0006h destroy session BX = session ID Return: AX = 0000h 0007h switcher termination BX = flags bit 0: set if calling switcher is only switcher loaded bits 1-15: reserved (0) Return: AX = 0000h ES:DI -> task switcher entry point (see AX=4B02h) Notes: function 0000h is generally called by the program which controls or invokes the task switcher, rather than by the task switcher itself; the entry point supplied to this function is not necessarily the entry point to the task switcher itself, and may be 0000h:0000h. If any client indicates that loading is not possible, all clients will be called with function 0007h; thus it is possible for a client to receive a termination notice without a corresponding initialization notice. except for functions 0002h and 0003h, the notification handler is called with interrupts enabled and may make any INT 21h function call; interrupts must not be enabled in functions 0002h and 0003h function 0007h may be called with ES:DI = 0000h:0000h if the entry point is no longer valid ----------2F4B02BX0000----------------------- INT 2F - DOS v5.0 TASK SWITCHER - INSTALLATION CHECK AX = 4B02h BX = 0000h ES:DI = 0000h:0000h Return: ES:DI = 0000h:0000h if task switcher not loaded ES:DI -> task switcher entry point (see below) if loaded AX = 0000h Note: the returned entry point is that for the most-recently loaded task switcher; the entry points for prior task switchers may be determined with the "get version" call (see below) SeeAlso: AX=4A05h,AX=4B03h Call task switcher entry point with: AX = 0000h get version Return: CF clear if successful AX = 0000h ES:BX -> task switcher version struct (see below) CF set if unsupported function AX = 0001h test memory region ES:DI -> first byte to be tested CX = size of region to test Return: CF clear if successful AX = memory type of tested region 0000h global 0001h global and local 0002h local (replaced on session switch) CF set if unsupported function AX = 0002h suspend switcher ES:DI -> new task switcher's entry point Return: CF clear if successful AX = state 0000h switcher has been suspended 0001h switcher not suspended, new switcher must abort 0002h switcher not suspended, but new switcher may run anyway CF set if unsupported function AX = 0003h resume switcher ES:DI -> new task switcher's entry point Return: CF clear if successful AX = 0000h CF set if unsupported function AX = 0004h hook notification chain ES:DI -> callback info structure to be added to chain (see AX=4B01h) Return: CF clear if successful AX = 0000h CF set if unsupported function AX = 0005h unhook notification chain ES:DI -> callback info structure to be removed from chain (see AX=4B01h) Return: CF clear if successful AX = 0000h CF set if unsupported function AX = 0006h query API support BX = asynchronous API identifier Return: CF clear if successful AX = 0000h ES:BX -> API info structure (see below) for the client which provides the highest level of CF set if unsupported function Format of task switcher version structure: Offset Size Description 00h WORD major version of supported protocol (current protocol is 1.0) 02h WORD minor version of supported protocol 04h WORD major version of task switcher 06h WORD minor version of task switcher 08h WORD task switcher ID (see AX=4B03h) 0Ah WORD operation flags bit 0: set if task switcher disabled bits 1-15: reserved (0) 0Ch DWORD pointer to ASCIZ task switcher name ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher) 10h DWORD pointer to previous task switcher's entry point or 0000h:0000h Format of API info structure: Offset Size Description 00h WORD size of structure in bytes (000Ah) 02h WORD API identifier 0001h NetBIOS 0002h 802.2 0003h TCP/IP 0004h LAN Manager named pipes 0005h Novell NetWare IPX 04h WORD major version \ of highest version of API for which the support 06h WORD minor version / level specified in the next field is provided 08h WORD support level 0001h minimal support 0002h API-level support 0003h switcher compatibility 0004h seamless compatibility ----------2F4B03----------------------------- INT 2F - DOS v5.0 TASK SWITCHER - ALLOCATE SWITCHER ID AX = 4B03h ES:DI -> task switcher entry point (see AX=4B02h) Return: AX = 0000h BX = switcher ID (0001h-000Fh), or 0000h if no more available Notes: if a task switcher has determined that it is the first to be loaded, it must allocate an identifier for itself and provide this function to all subsequent task switchers; if it is not the first to be loaded, it must call this function to allocate an ID. The switcher ID is used as the high four bits of all session identifiers to ensure unique session IDs. if no more switcher IDs are available, the new task switcher making the call must terminate or disable itself the task switcher providing the identifiers may call the new task switcher's entry point as needed this call is available from within DOSSHELL even if the task switcher is not installed SeeAlso: AX=4B02h,AX=4B04h ----------2F4B04----------------------------- INT 2F - DOS v5.0 TASK SWITCHER - FREE SWITCHER ID AX = 4B04h BX = switcher ID ES:DI -> task switcher entry point (see AX=4B02h) Return: AX = 0000h BX = status 0000h successful other error (invalid ID or ID not allocated) Notes: called by a task switcher when it exits, unless it was the first loaded and is providing the support for AX=4B03h and AX=4B04h the task switcher providing the identifiers may call the terminating task switcher's entry point as needed this call is available from within DOSSHELL even if the task switcher is not installed SeeAlso: AX=4B02h,AX=4B03h ----------2F4B05----------------------------- INT 2F - DOS v5.0 DOSSHELL TASK SWITCHER - IDENTIFY INSTANCE DATA AX = 4B05h ES:BX = 0000h:0000h CX:DX -> task switcher entry point (see AX=4B02h) Return: ES:BX -> startup info structure (see below) or 0000h:0000h Notes: called by task switcher clients with instance data should hook this call, pass it through to the previous handler with unchanged registers using a simulated interrupt. On return, the client should create a startup info structure (see below), store the returned ES:BX in the "next" field, and return the address of the created structure in ES:BX all MSDOS function calls are available from within this call SeeAlso: AX=1605h,AX=4B02h Format of startup info structure: Offset Size Description 00h 2 BYTEs major, minor version of info structure (03h,00h) 02h DWORD pointer to next startup info structure or 0000h:0000h 06h DWORD 0000h:0000h (ignored) 0Ah DWORD ignored 0Eh DWORD pointer to instance data records Format of one instance data record in array: Offset Size Description 00h DWORD address of instance data (end of array if 0000h:0000h) 04h WORD size of instance data ----------2F53------------------------------- INT 2F U - ??? AH = 53h AL = subfunction (0Bh, maybe others???) Return: ??? Note: called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+ SeeAlso: AH=54h,INT 33/AX=002Fh ----------2F54------------------------------- INT 2F U - ??? AH = 54h AL = subfunction (00h, 01h, maybe others???) Return: ??? Note: called by MS Windows 3.1 POWER.DRV SeeAlso: AH=53h ----------2F5453----------------------------- INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE AX = 5453h BX = subfunction 00h installation check CX = 0000h DS:SI -> 8-char blank-padded name Return: AX = FFFFh installed CX = ID number of already-installed copy = anything else, not installed CX = ID number for TSR when installed 01h get user parameters CX = TSR ID number Return: AX = 0000h successful ES:BX -> user parameter block (see below) = nonzero failed 02h check if hotkey in use CL = scan code of hot key Return: AX = FFFFh hot key conflicts with another TSR otherwise safe to use the hotkey 03h replace default critical error handler CX = TSR ID number DS:SI -> new routine for INT 24h Return: AX = nonzero, unable to install new handler 04h get internal data area CX = TSR ID number Return: AX = 0000h ES:BX -> TSR's internal data area (see below) = nonzero, TSR not found 05h set multiple hot keys CX = TSR ID number DL = number of additional hot keys to allocate DS:SI -> table of hot keys BYTE hotkey scan code BYTE hotkey shift state BYTE flag value to pass to TSR (nonzero) Return: AX = nonzero, unable to install hot keys 06h - 0Fh reserved 10h enable TSR CX = TSR ID number Return: AX = nonzero, unable to enable 11h disable TSR CX = TSR ID number Return: AX = nonzero, unable to disable 12h unload TSR CX = TSR ID number Return: AX = nonzero, invalid TSR number Note: if any interrupts used by TSR have been grabbed by another TSR, the TesSeRact routines will wait until it is safe to remove the indicated TSR from memory 13h restart TSR CX = TSR ID number of TSR which was unloaded but is still in memory Return: AX = nonzero, unable to restart TSR 14h get status word CX = TSR ID number Return: AX = FFFFh invalid ID number = other, successful BX = bit flags 15h set status word CX = TSR ID number DX = new bit flags Return: AX = nonzero, unable to set status word 16h get INDOS state at popup CX = TSR ID number Return: AX = 0000h successful BX = value of INDOS flag 17h - 1Fh reserved 20h call user procedure CX = TSR ID number ES:DI -> user-defined data Return: AX = 0000h successful 21h stuff keystrokes into keyboard buffer CX = TSR ID number DL = speed 00h stuff keystrokes only when buffer is empty 01h stuff up to four keystrokes per clock tick 02h stuff up to 15 keystrokes per clock tick DH = scan code flag if zero, buffer contains alternating ASCII and scan codes if nonzero, buffer contains only ASCII codes SI = number of keystrokes ES:DI -> buffer to stuff Return: AX = 0000h success F0F0h user aborted with ^C or ^Break other unable to stuff keystrokes 22h (v1.10) trigger popup CX = TSR ID number Return: AX = 0000h success, TSR will either pop up or beep to indicate that it is unable to pop up nonzero invalid ID number 23h (v1.10) invoke TSR's background function CX = TSR ID number Return: AX = 0000h success FFFFh not safe to call background function nonzero invalid ID number 24h - 2Fh reserved Notes: Borland's THELP.COM popup help system for Turbo Pascal and Turbo C (versions 1.x and 2.x only) fully supports the TesSeRact API, as do the SWAP?? programs by Innovative Data Concepts. AVATAR.SYS supports functions 00h and 01h (only the first three fields of the user parameter block) using the name "AVATAR " SeeAlso: AX=CAFEh Format of User Parameter Block: Offset Size Description 00h 8 BYTEs blank-padded TSR name 08h WORD TSR ID number 0Ah DWORD bitmap of supported functions 0Eh BYTE scan code of primary hotkey 00h = pop up when shift states match FFh = no popup (if shift state also FFh) 0Fh BYTE shift state of primary hotkey FFh = no popup (if scan code also FFh) 10h BYTE number of secondary hotkeys 11h DWORD pointer to extra hotkeys set by func 05h 15h WORD current TSR status flags 17h WORD PSP segment of TSR 19h DWORD DTA for TSR 1Dh WORD default DS for TSR 1Fh DWORD stack at popup 23h DWORD stack at background invocation Format of TSR internal data area: Offset Size Description 00h BYTE revision level of TesSeRact library 01h BYTE type of popup in effect 02h BYTE INT 08 occurred since last invocation 03h BYTE INT 13 occurred since last invocation 04h BYTE active interrupts 05h BYTE active soft interrupts 06h BYTE DOS major version 07h BYTE how long to wait before popping up 08h DWORD pointer to INDOS flag 0CH DWORD pointer to DOS critical error flag 10h WORD PSP segment of interrupted program 12h WORD PSP segment of prog interrupted by INT 28 14h DWORD DTA of interrupted program 18h DWORD DTA of program interrupted by INT 28 1Ch WORD SS of interrupted program 1Eh WORD SP of interrupted program 20h WORD SS of program interrupted by INT 28 22h WORD SP of program interrupted by INT 28 24h DWORD INT 24 of interrupted program 28h 3 WORDs DOS 3+ extended error info 2Eh BYTE old BREAK setting 2Fh BYTE old VERIFY setting 30h BYTE were running MS WORD 4.0 before popup 31h BYTE MS WORD 4.0 special popup flag 32h BYTE enhanced keyboard call in use 33h BYTE delay for MS WORD 4.0 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h): DWORD old interrupt vector BYTE interrupt number WORD offset in TesSeRact code segment of new interrupt handler ----------2F5500----------------------------- INT 2F U - DOS v5.0 - COMMAND.COM INTERFACE AX = 5500h Return: AX = 0000h DS:SI -> entry point table Notes: used to access the shareable portion of COMMAND.COM, which may have been moved into the HMA; only the primary COMMAND.COM retains this portion procedures called from a dispatcher in COMMAND's resident portion; most assume that the segment address of the resident portion is on the stack and are thus not of general use ----------2F6282----------------------------- INT 2F U - PC Tools v7.0+ VDEFEND, DATAMON - SET ??? ADDRESS AX = 6282h CX:DX -> ??? or 0000h:0000h DI = 0000h ??? FFFFh ??? other segment of ??? Return: BX = 0062h Note: if CX:DX = 0000h:0000h on entry, the ??? address is not changed (DATAMON only) SeeAlso: INT 21/AH=FAh"VDEFEND" ----------2F6284BX0000----------------------- INT 2F U - PC Tools v7.0+ DATAMON - INSTALLATION CHECK AX = 6284h BX = 0000h CX = 0000h Return: AX = segment of resident code BX = 5555h CX = 5555h ----------2F6284BX0001----------------------- INT 2F U - PC Tools v7.0+ DATAMON - GET ??? AX = 6284h BX = 0001h CX = 0001h Return: AX:BX -> ??? CX = BX ----------2F6284BX0002----------------------- INT 2F U - PC Tools v7.0+ DATAMON - GET ??? AX = 6284h BX = 0002h CX = 0002h Return: AX = ??? BX = ??? CX = AX DX = BX ----------2F6284BX0003----------------------- INT 2F U - PC Tools v7.0+ DATAMON - SET ??? FLAGS AX = 6284h BX = 0003h CX = flags bit 12: ??? 10: ??? 5: ??? 3: ??? DX = flags bit 15: ??? ----------2F6400----------------------------- INT 2F - SCRNSAV2.COM - INSTALLATION CHECK AX = 6400h Return: AL = 00h not installed FFh installed Note: SCRNSAV2.COM is a screen saver for PS/2's with VGA by Alan Ballard SeeAlso: INT 10/AX=5555h ----------2F7000------------------------------ INT 2F - License Service API - INSTALLATION CHECK AX = 7000h CX = license server index (0000h to 001Fh) Return: AL = status 00h not installed FFh installed Notes: The License Service API is being maintained by Microsoft but is being supported by a large number of companies including Apple, Banyan, DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association, and Wordperfect (not a complete list!) Each license service provider must search for the next free index slot to use SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h ----------2F7001------------------------------ INT 2F - License Service API - REQUEST License AX = 7001h CX = license server index (0000h to 001Fh) DS:DX -> SLSREQEUST structure (see below) Return: AX = status 0000h success else provider error code ES:BX = provider specific handle for the license context SeeAlso: AX=7002h,AX=7004h,AX=7005h Format of SLSREQUEST structure: Offset Size Description 00h DWORD (return) status code 04h DWORD (return) handle identifying context 08h DWORD (call) address of Publisher string 0Ch DWORD (call) address of Product string 10h DWORD (call) address of Version string 14h DWORD units required 18h DWORD address of comment string 1Ch DWORD address of SLSCHALLENGE structure (see below) Format of SLSCHALLENGE structure: Offset Size Description 00h DWORD algorithm (currently always 1) 04h DWORD secret to be challenged (1-255) 08h DWORD size of challenge in bytes (1-255) 0Ch N BYTEs challenge data ----------2F7002------------------------------ INT 2F - License Service API - RELEASE License AX = 7002h CX = license server index (0000h to 001Fh) DS:DX -> SLSRELEASE structure (see below) ES:BX = provider specific handle for the license context Return: AL = status 00h not installed FFh installed SeeAlso: AX=7001h,AX=7005h Format of SLSRELEASE structure: Offset Size Description 00h DWORD handle indentifying license context 04h DWORD total units consumed 08h DWORD address of comment string ----------2F7003------------------------------ INT 2F - License Service API - UPDATE AX = 7003h CX = license server index (0000h to 001Fh) DS:DX -> SLSUPDATE structure ES:BX = provider specific handle for the license context Return: AL = status 00h not installed FFh installed SeeAlso: AX=7004h,AX=7005h Format of SLSUPDATE structure: Offset Size Description 00h DWORD (return) status code 04h DWORD (call) handle identifying license context 08h DWORD (call) total units consumed 0Ch DWORD additional units required 10h DWORD address of comment string 14h DWORD address of SLSCHALLENGE structure (see AX=7001h) ----------2F7004------------------------------ INT 2F - License Service API - GET ERROR AX = 7004h CX = license server index (0000h to 001Fh) DS:DX -> SLSGETERROR structure (see below) ES:BX = provider specific handle for the license context Return: AL = status 00h not installed FFh installed SeeAlso: AX=7000h,AX=7001h Format of SLSGETERROR structure: Offset Size Description 00h DWORD (return) status code 04h DWORD handle identifying license context 08h DWORD error code 0Ch DWORD buffer size in bytes 10h N BYTEs data buffer ----------2F7005------------------------------ INT 2F - License Service API - QUERY License AX = 7005h CX = license server index (0000h to 001Fh) DS:DX -> SLSQUERY structure (see below) ES:BX = provider specific handle for the license context Return: AL = status 00h not installed FFh installed SeeAlso: AX=7001h,AX=7002h Format of SLSQUERY structure: Offset Size Description 00h DWORD (return) status code 04h DWORD handle identifying license context 08h DWORD information index 0Ch DWORD buffer size in bytes 10h N BYTEs data buffer ----------2F7200----------------------------- INT 2F - SRDISK v1.30 - INSTALLATION CHECK AX = 7200h Return: AL = FFh if installed ES = segment of device driver header (see below) Note: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala Format of device driver header: Offset Size Description 00h 10 BYTEs same as standard device driver header (see INT 21/AH=52h) 0Ah BYTE number of subunits (drives) supported by driver 0Bh 3 BYTEs signature "SRD" 0Eh 4 BYTEs memory type string (currently only "XMS ") 12h 4 BYTEs ASCII driver version string "N.NN" 16h BYTE 00h 17h BYTE configuration format version (currently 00h) 18h WORD offset of drive configuration data ----------2F7A00----------------------------- INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK AX = 7A00h Return: AL = 00h not installed = FFh installed ES:DI -> FAR entry point for routines accessed exclusively through INT 7A in NetWare versions through 2.0a. Call with same values as INT 7A SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"Novell" ----------2F7A10----------------------------- INT 2F - Novell NetWare - TBMI v2.0 - GET TBMI STATUS AX = 7A10h Return: DH = major TBMI version number DL = minor TBMI version number CX = segment address of TBMI resident part BX = status word of TBMI bit 0: INT2F intercepted by TBMI bit 1: INT7A intercepted by TBMI bit 2: INT64 intercepted by TBMI bits 3-14: reserved or unused ??? bit 15: outstanding task ID was detected Note: TBMI is the Task-Switched Buffer Manager Interface SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h ----------2F7A11----------------------------- INT 2F - Novell NetWare - TBMI v2.0 - GET INT2F HANDLERS AX = 7A11h Return: ES:BX -> old INT 2F handler DS:DX -> TBMI INT 2F handler SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h ----------2F7A12----------------------------- INT 2F - Novell NetWare - TBMI v2.0 - GET INT64 HANDLERS AX = 7A12h Return: ES:BX -> old INT 64 handler DS:DX -> TBMI INT 64 handler SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h ----------2F7A13----------------------------- INT 2F - Novell NetWare - TBMI v2.0 - GET INT7A HANDLERS AX = 7A13h Return: ES:BX = old INT 7A handler DS:DX = TBMI INT 7A handler SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h ----------2F7A14----------------------------- INT 2F - Novell NetWare - TBMI v2.0 - GET STATISTICS AX = 7A14h CX = statistic to retrieve 0000h available diagnostic functions??? Return: CX = maximum available function??? (000Ch for v2.0) 0001h buffers in use Return: CX = TBMI buffers currently in use 0002h maximum buffers used Return: CX = maximum number of buffers ever in use 0003h unavailable buffers Return: CX = count of unavailable TBMI buffers 0004h old interrupt usage Return: CX = TBMI accesses to intercepted old vectors INT 2F, INT 64, and INT 7A 0005h far call usage Return: CX = TBMI accesses to IPX/SPX far call handler (not including internal accesses) 0006h task buffering Return: CX = TBMI task buffering status (enabled/disabled or disable/enable switch count???) 0007h current task ID Return: CX = TBMI current task ID number (0000h if ???) 0008h outstanding ID count Return: CX = number of outstanding TBMI IDs 0009h configured ECBs Return: CX = number of TBMI Event Control Blocks configured 000Ah configured data ECBs Return: CX = number of TBMI data ECBs configured 000Bh configured sockets Return: CX = number of TBMI sockets configured (from NETCFG) 000Ch current sockets Return: CX = number of TBMI sockets currently in use SeeAlso: AX=7A10h ----------2F7A1B----------------------------- INT 2F - Novell NetWare - TBMI v2.0 - RESERVED??? AX = 7A1Bh Note: this call merely performs an IRET ----------2F7A80----------------------------- INT 2F - Novell NetWare - SHELL 3.01d BROADCAST - ABNORMAL EXIT AX = 7A80h Return: nothing Notes: called on abnormal exit of the NetWare shell to notify other Novell TSRs that it is unsafe to call the shell in the future. must be passed through so that all interested programs see the exit on receiving this call, IPXODI clears an internal pointer to a default value; Novell's NETBIOS.EXE clears its INT 21h pointer to 0000h:0000h and stops calling it SeeAlso: AX=7A81h ----------2F7A81----------------------------- INT 2F - Novell NetWare - SHELL 3.01d BROADCAST - SET SHELL INT 21 HANDLER AX = 7A81h CX:DX -> shell's INT 21h entry point Return: nothing Notes: the shell calls this function as it loads to allow interested TSRs and drivers to make a local copy of the shell's entry point must be passed through so that all interested programs see it ----------2F7A85----------------------------- INT 2F - Novell NetWare - shell 3.01 - BROADCAST INFORM AX = 7A85h CX = broadcast server number Return: CX = 0000h if broadcast message handled by another program CX unchanged if broadcast not handled ----------2F7A90----------------------------- INT 2F U - Novell NetWare - NETBIOS.EXE 3+ - INSTALLATION CHECK AX = 7A90h Return: AL = 00h if present BX = ??? CX = PSP segment of NETBIOS resident code SeeAlso: AX=7AFEh ----------2F7AFE----------------------------- INT 2F - Novell NetWare - DOSNP.EXE - INSTALLATION CHECK AX = 7AFEh Return: AL = FFh if present ES = (data???) segment of DOSNP Program: DOSNP.EXE provides "named pipes" support for DOS workstations running NetWare Note: the NetWare shell calls this function and refuses to load if DOSNP is present SeeAlso: AX=7A90h ----------2F7AFFBX0000----------------------- INT 2F - Novell NetWare - TBMI v2.0 - INSTALLATION CHECK??? AX = 7AFFh BX = 0000h CX = 4E65h ("Ne") DX = 7457h ("tW") ES:DI -> IPX/SPX special handler (XMS/EMS ???) Return: AL = FFh if installed CX = configured sockets (14h) DS:SI -> data table ??? ES:DI -> IPX far call handler Note: for IPX/SPX this call reportedly returns DS:DI pointing to the table of pointers to service events queue head and tail SeeAlso: AX=7AFFh/BX=0001h ----------2F7AFFBX0001----------------------- INT 2F - Novell NetWare - TBMI v2.0, shell v3.01d - INSTALLATION CHECK??? AX = 7AFFh BX = 0001h CX = 4E65h ("Ne") DX = 7457h ("tW") Return: AL = FFh if installed CX = ??? (8000h) SI = ??? (or -> ???) (0002h) ES:DI -> IPX far call handler ES:DX -> 6-byte data area ??? SeeAlso: AX=7AFFh/BX=0000h ----------2F7F24----------------------------- INT 2F - Multiplex - ??? AX = 7F24h ??? Return: ??? Note: called by PC/370, an IBM 370 emulator by Donald S. Higgins ----------2F7F26----------------------------- INT 2F - Multiplex - ??? AX = 7F26h ??? Return: ??? Note: called by PC/370, an IBM 370 emulator by Donald S. Higgins ----------2F8000----------------------------- INT 2F - EASY-NET - INSTALLATION CHECK AX = 8000h Return: AL = 00h not installed FFh installed Note: EASY-NET is a shareware two-machine serial-port network ----------2F8000----------------------------- INT 2F - Nanosoft, Inc. TurboNET server - INSTALLATION CHECK AX = 8000h Return: AL = FFh if installed BX = CS of resident code CX = ??? (03FCh) Note: TurboNET is a NetBIOS-based file redirector and server; a demonstration version may be downloaded from Nanosoft's BBS SeeAlso: AX=8100h ----------2F8000DX0000----------------------- INT 2F - FaxBIOS interface - INSTALLATION CHECK AX = 8000h DX = 0000h DI = 0000h Return: AL = FFh if installed DX:DI -> signature "FaxBiosjpc" Note: FaxBIOS may use any multiplex number from 80h through FFh; to determine whether it is installed, it is necessary to poll all multiplex numbers for one which returns the above signature SeeAlso: AH=2Ah,AX=80FBh ----------2F8001----------------------------- INT 2F - Nanosoft, Inc. TurboNET server - ??? AX = 8001h DS:SI -> 16-byte buffer for ??? Return: AH = status 00h successful 01h error Note: makes NetBIOS calls ----------2F80FB----------------------------- INT 2F - FaxBIOS interface - COMMAND SUBMISSION AX = 80FBh BX = function number (see below) DX:DI -> command buffer (see below) Return: AL = FFh if submitted OK CX = result code (see below) Note: FaxBIOS may use any multiplex number from 80h through FFh SeeAlso: AX=8000h"FaxBIOS",AX=CBDDh Values for function number: 0001h SYS_LOGIN 0002h SYS_LOGOUT 0003h SYS_GET_FAXAPP_INFO 0004h STAT_IO_GET 0005h STAT_FAXBIOS_GET 0006h PDIR_OPEN 0007h PDIR_CLOSE 0008h PDIR_READ_PERSON 0009h PDIR_PARTIAL_READ 000Ah PDIR_READ_GROUP 000Bh PDIR_READ_MEMBER_LIST 000Ch PDIR_WRITE_PERSON 000Dh PDIR_WRITE_GROUP 000Eh PDIR_DELETE_PERSON 000Fh PDIR_DELETE_GROUP 0010h PDIR_READ_GROUP_LIST 0011h PDIR_IN_GROUP 0012h PDIR_OUT_GROUP 0013h SCHED_OPEN 0014h SCHED_ADD_DEST 0015h SCHED_ADD_FILE 0016h SCHED_SET_PARAMS 0017h SCHED_CANCEL 0018h SCHED_CLOSE 0019h SLOG_OPEN 001Ah SLOG_CLOSE 001Bh SLOG_SHORT_ENV_STAT 001Ch SLOG_LONG_ENV_STAT 001Dh SLOG_DEST_STAT 001Eh SLOG_FILE_STAT 001Fh SLOG_CANCEL_ENV 0020h RLOG_OPEN 0021h RLOG_CLOSE 0022h RLOG_READ 0023h GRAPH_GET_FILE_TYPE 0024h GRAPH_EXPORT_FILE 0025h GRAPH_GET_LAYOUT_INFO 0026h GRAPH_CREATE_FILE 0027h GRAPH_CLOSE_FILE 0028h GRAPH_CREATE_PAGE 0029h GRAPH_WRITE 002Ah GRAPH_END_PAGE 002Bh GRAPH_OPEN_FILE 002Ch GRAPH_GOTO_PAGE 002Dh GRAPH_READ 002Eh IOCTL_GET 002Fh IOCTL_SET 0030h IOCTL_ANSWER_FAX 0031h IOCTL_DIAL Values for result code: 0000h successful 0001h not prepared or servicing another client (busy) 0002h call failed due to sharing (LOCKED) 0003h logged-in client limit reached (FULL) 0004h transport denied (TRANSPORT_DENIED) 0005h not implemented (NOT_IMPLEMENTED) 0006h aborted while in progress (ABORTED) 0007h permissions denied (PERMISSION_DENIED) 0008h requested data is no longer valid (NO_LONGER_VALID) 0080h unspecified system error occurred 0081h an internal file was not found 0082h an internal file could not be created 0083h an internal file could not be opened 0084h an internal file could not be closed 0085h error occurred writing to an internal file 0086h error occurred reading from an internal file 0087h bad or corrupted file encountered 0088h an access violation occurred 0089h an internal file is empty 008Ah insufficient memory to process request 008Bh FaxBIOS was unable to issue a handle 008Ch an error internal to FaxBIOS occurred 008Dh no room on disk 0100h unspecified error accessing client file 0101h file not found 0102h creation fault 0103h open fault 0104h close fault 0105h write fault 0106h read fault 0107h file corrupted 0108h access violation 0109h empty file 0200h unspecified argument error 0201h bad function 0202h bad option 0203h bad structure size 0204h bad buffer size 0205h bad client ID 0300h unspecified error with token 0301h cover sheet token was invalid 0302h logo token was invalid 0303h signature token was invalid 0304h font token was invalid 0305h phone directory token was invalid 0306h outbound route token was invalid 0307h priority token was invalid 0308h sort token was invalid 0309h billing token was invalid 0400h unspecified handle error 0401h bad Phone Directory handle 0402h bad scheduling handle 0403h bad read send log handle 0404h bad read receive log handle 0405h bad graphics handle 0500h data passed in structure was invalid 0501h name field given is invalid 0502h phone number given is invalid 0503h poll code submitted is invalid 0504h file type constant was invalid 0505h BFT constant not defined or supported 0506h resolution not defined or supported 0507h page length not defined or supported 0508h page width not defined or supported 0509h date & time requested are ridiculous 050Ah Subject text was not an ASCIIZ string 050Bh From text was not an ASCIIZ string 050Ch requested envelope ID was not found 050Dh requested envelope ID is not valid 050Eh envelope requested was not found 050Fh destination index is out of range 0510h file index is out of range 0511h index into receive log is out of range 0512h file name specified was incomplete or invalid 0513h page selected was out of range 0514h bit width more than byte width 0515h mode for open is not defined 0516h person index is out of range 0517h person ID is out of range 0518h group index out of range or invalid 0519h group ID out of range or invalid 051Ah range of indices to read is invalid 051Bh group name given is invalid 051Ch field_to_use is badly specified 051Dh predicate invalid for field specified 0600h unspecified client procedure error 0601h device of interest is not present 0602h device of interest has been removed 0603h device of interest is not responding 0604h device of interest is disabled 0605h could not dial because device was in use 0606h maximum destination limit exceeded 0607h maximum file limit exceeded 0608h scheduling closed with no destination 0609h scheduling closed with no files or poll 060Ah scheduling closed with no parameters specified 060Bh file type specified does not match file 060Ch file type specified is not supported 060Dh file submitted is not exportable 060Eh file type specified is not imageable 060Fh error converting file 0610h envelope could not be cancelled 0611h Phone Directory is full 0612h record is already in the Phone Directory 0613h selected group in Phone Directory is full 0614h person is already in the group 0615h person is not in the group & cannot be removed 0616h a graphics file to be created already exists 0617h a grphics file to be read is empty 0618h GRAPH_CREATE_PAGE called before GRAPH_END_PAGE 0619h graph read or write attempted without goto or create 061Ah graph page contains no data 061Bh Phone Directory is already open for this client 061Ch schedule log is already open for this client 061Dh receive log is aready open for this client 061Eh Phone Directory function requires write mode 0800h denied exclusive use of the API Format of SYS_LOGIN command buffer: Offset Size Description 00h WORD structure size 02h WORD function number 04h WORD return code 06h WORD client ID 08h WORD API Major Version 0Ah WORD API Minor Version 0Ch DWORD reserved for manufacturer's use 10h 22 BYTEs manufacturer's ID 26h WORD highest possible device number 28h WORD maximum destinations per envelope 2Ah WORD maximum files per envelope 2Ch WORD FaxBIOS capabilities bitmap bit 0: transmit supported bit 1: receive supported bit 2: IOCTL supported bit 3: IOCTL_DIAL supported bit 4: IOCTL_ANSWER_FAX supported bit 5: manual transmit supported bit 6: optional phone services supported bit 7: canonical phone objects bit 8: seam with next supported 2Eh DWORD T.30 capabilities bitmap bit 0: low vertical resolution (minimum) bit 1: high vertical resolution bit 2: page width 107mm (4.21 in) bit 3: page width 151mm (5.91 in) bit 4: page width 215mm (8.46 in) (minimum) bit 5: page width 255mm (10.04 in) bit 6: page width 303mm (11.93 in) bit 7: unused bit 8: page length 297mm (11.69 in) (minimum) bit 9: page length 364mm (14.33 in) bit 10: page length 279mm (11 in) bit 11: page length unlimited bit 12: Group 4 resolution 300x300 bit 13: Group 4 resolution 400x400 bit 14: able to respond to poll from remote bit 15: able to poll remote bit 16: binary file transfer supported 32h WORD IPC handle 34h DWORD amount of memory needed to load 38h WORD scope (00h for public, nonzero for private) 3Ah 6 BYTEs future expansion 40h WORD structure size Format of SYS_LOGOUT command buffer: Offset Size Description 00h WORD structure size 02h WORD function number 04h WORD return code 06h WORD client ID 08h DWORD client tag (for client's internal use) 0Ch 6 BYTEs future expansion 12h WORD structure size Format of SYS_GET_FAXAPP_INFO command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs FaxBIOS data 5Ch 80 BYTEs default cover ACh 80 BYTEs default logo FCh 80 BYTEs default signature 14Ch 80 BYTEs default font 10 19Ch 80 BYTEs default font 165 1ECh 80 BYTEs default user font 23Ch 80 BYTEs default Pdir 28Ch 80 BYTEs default sort 2DCh 10 BYTEs default bill 2E6h 10 BYTEs default route 2F0h 40 BYTEs default cover sheet form 318h 34 BYTEs valid dial characters 33Ah 6 BYTEs local country code 340h 6 BYTEs local city or area code 346h 6 BYTEs future expansion 34Ch WORD structure size Format of STAT_IO_GET command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD device number 0Eh WORD current activity 10h WORD number of rings (if ringing) 12h WORD number of fascimiles transmitted 14h WORD number of fascimiles received 16h WORD status of last transmission 18h WORD envelope number of last transmission 1Ah WORD index of last destination in envelope 1Ch WORD status of last reception 1Eh WORD current page (if session in progress) 20h 80 BYTEs current file 70h104 BYTEs remote number D8h 20 BYTEs last name ECh 20 BYTEs first name 100h 32 BYTEs company name 120h 32 BYTEs notes 140h WORD current envelope ID (if sending) 142h WORD total pages in transmission (if sending) 144h 6 BYTEs future expansion 14h WORD structure size Format of STAT_FAXBIOS_GET command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD status ID 0Eh WORD currenty FaxBIOS function number 10h WORD current Client ID being serviced 12h WORD number of things to do 14h WORD number of them done 16h WORD number of pages to do (if any) 18h WORD number of them done 1Ah WORD number of files to do 1Ch WORD number of them done 1Eh 80 BYTEs current File 6Eh WORD 0 if all devices are idle 70h WORD number of fascimiles transmitted 72h WORD number of fascimiles received 74h WORD status of last transmission in system 76h WORD envelope ID of last transmission 78h WORD index of last destination in envelope 7Ah WORD status of last reception in system 7Ch DWORD time of next transmission 80h 6 BYTEs future expansion 86h WORD structure size Format of PDIR_OPEN command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs Phone Directory token 5Ch 80 BYTEs sort order token ACh WORD open Mode (0 = read, 1 = write) AEh WORD Phone Directory handle B0h WORD number of people B2h WORD number of groups B4h WORD bitmap of fields supported by partial read B6h 6 BYTEs future expansion BCh WORD structure size Format of PDIR_CLOSE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD Phone Directory handle 0Eh 6 BYTEs future expansion 14h WORD structure size Format of PDIR_READ_PERSON command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD Phone Directory handle 0Eh WORD retrieve by index 10h WORD person ID or index 12h WORD how many groups person is in 14h WORD person ID 16h 20 BYTEs last name 2Ah 20 BYTEs first name 3Eh 32 BYTEs company 5Eh 32 BYTEs notes 7Eh 6 BYTEs FAX country code 84h 6 BYTEs FAX city/area code 8Ah 14 BYTEs FAX local number 98h 14 BYTEs FAX extension A6h 24 BYTEs reserved BEh 6 BYTEs voice country code C4h 6 BYTEs voice city/area code CAh 14 BYTEs voice local number D8h 14 BYTEs voice extension E6h 24 BYTEs reserved FEh 10 BYTEs outbound routing information 108h 10 BYTEs billing information, credit card etc 112h DWORD remote FAX capabilities 116h 21 BYTEs T.30 poll code of FAX number 12Bh 15 BYTEs reserved 13Ah 6 BYTEs future expansion 140h WORD structure size Format of SCHED_OPEN, SCHED_CANCEL command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD scheduler handle 0Eh 6 BYTEs future expansion 14h WORD structure size Format of SCHED_ADD_DEST command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD schedule handle 0Eh WORD device number if manual send wanted 10h WORD non-zero if poll desired 12h WORD person ID 14h 20 BYTEs last name 28h 20 BYTEs first name 3Ch 32 BYTEs company 5Ch 32 BYTEs notes 7Ch 6 BYTEs FAX country code 82h 6 BYTEs FAX city/area code 88h 14 BYTEs FAX local number 96h 14 BYTEs FAX extension A4h 24 BYTEs reserved BCh 6 BYTEs voice country code C2h 6 BYTEs voice city/area code C8h 14 BYTEs voice local number D6h 14 BYTEs voice extension E4h 24 BYTEs reserved FCh 10 BYTEs outbound routing information 106h 10 BYTEs billing information, credit card etc 110h DWORD remote FAX capabilities 114h 21 BYTEs T.30 poll code of FAX number 129h 15 BYTEs reserved 138h 6 BYTEs future expansion 13Eh WORD structure size Format of SCHED_ADD_FILE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD schedule handle 0Eh WORD file type 0000h unidentified 0001h native file format 0002h ASCII 0003h FaxBIOS Tiff Class F 10h 80 BYTEs file name 60h 80 BYTEs font token B0h WORD conversion options bitmap B2h WORD resolution 0000h standard 98 lines per inch, 204 dpi 0001h fine 196 lines per inch, 204 dpi 0002h Group4 300 dpi 0003h Group4 400 dpi B4h WORD page length 0000h 279 mm (11 in) 0001h 297 mm (11.69 in) 0002h 364 mm (14.33 in) 0003h unlimited B6h WORD page width 0000h 215 mm (8.46 in) 0001h 255 mm (10.04 in) 0002h 303 mm (11.93 in) 0003h 151 mm (5.91 in) 0004h 107 mm (4.21 in) B8h WORD binary file transfer specification 0000h only as FAX 0001h only as file (for non-faxable files) 0002h as file when possible else FAX BAh WORD seam flag (nonzero for seam with next) BCh WORD delete flag (nonzero to delete when done) BEh 6 BYTEs future expansion C4h WORD structure size Format of SCHED_SET_PARAMS command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD scheduler handle 0Eh DWORD time to send 10h 10 BYTEs priority token 1Ch 80 BYTEs logo file token 6Ch 80 BYTEs signature file token BCh 80 BYTEs cover page token 10Ch 40 BYTEs Subject text 134h 40 BYTEs From text 15Ch WORD user ID 15Eh 6 BYTEs future expansion 164h WORD structure size Format of SCHED_CLOSE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD scheduler handle 0Eh WORD envelope ID generated 10h 6 BYTEs future expansion 16h WORD structure size Format of SLOG_OPEN, SLOG_CLOSE, RLOG_OPEN, RLOG_CLOSE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD log handle 0Eh WORD number of entries 10h 6 BYTEs future expansion 16h WORD structure size Format of GRAPH_GET_FILE_TYPE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs filename 5Ch WORD file type 0000h unidentified 0001h native file format 0002h ASCII 0003h FaxBIOS Tiff Class F 5Eh WORD bitmap of supported capabilities 60h 6 BYTEs future expansion 66h WORD structure size Format of GRAPH_CREATE_FILE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs filename 5Ch WORD graph handle 5Eh 6 BYTEs future expansion 64h WORD structure size Format of GRAPH_CLOSE_FILE, GRAPH_END_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh 6 BYTEs future expansion 14h WORD structure size Format of GRAPH_CREATE_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh WORD resolution 10h WORD page width 12h 6 BYTEs future expansion 18h WORD structure size Format of GRAPH_WRITE_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh DWORD pointer to storage for image 12h WORD band height in lines 14h WORD width of page image in bytes 16h WORD facsimile page width constant 18h WORD width of page image in bits 1Ah WORD number of bytes actually processed 1Ch 6 BYTEs future expansion 22h WORD structure size Format of GRAPH_OPEN_FILE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch 80 BYTEs filename 5Ch WORD file type 5Eh WORD graph handle 60h WORD number of pages 62h 6 BYTEs future expansion 68h WORD structure size Format of GRAPH_GOTO_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh WORD page number 10h WORD vertical resolution 12h WORD page width 14h DWORD page length 18h 6 BYTEs future expansion 1Eh WORD structure size Format of GRAPH_READ_PAGE command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD graph handle 0Eh DWORD pointer to storage for image 12h WORD band height in lines 14h WORD width of page image in bytes 16h WORD facsimile page width constant 18h WORD width of page image in bits 1Ah WORD number of bytes actually processed 1Ch 6 BYTEs future expansion 22h WORD structure size Format of IOCTL_ANSWER_FAX command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD device number 0Eh 6 BYTEs future expansion 14h WORD structure size Format of IOCTL_DIAL command buffer: Offset Size Description 00h 12 BYTEs common data (see SYS_LOGOUT above) 0Ch WORD device number 0Eh 6 BYTEs country code 14h 6 BYTEs city or area code 1Ah 14 BYTEs local number 28h 14 BYTEs extension 36h 14 BYTEs reserved 4Eh 6 BYTEs future expansion 54h WORD structure size ----------2F8100----------------------------- INT 2F U - Nanosoft, Inc. TurboNET redirector - INSTALLATION CHECK AX = 8100h Return: AL = FFh if installed Note: TurboNET is a NetBIOS-based file redirector and server; a demonstration version may be downloaded from Nanosoft's BBS SeeAlso: AX=8000h"TurboNET" ----------2F8101----------------------------- INT 2F U - Nanosoft, Inc. TurboNET redirector - ??? AX = 8101h Return: AL = ??? DL = ??? ----------2F8102----------------------------- INT 2F U - Nanosoft, Inc. TurboNET redirector - ??? AX = 8102h Return: AL = ??? DL = ??? ----------2F8103----------------------------- INT 2F U - Nanosoft, Inc. TurboNET redirector - GET MACHINE NAME??? AX = 8103h ES:DI -> 17-byte buffer Return: buffer filled ----------2F8104----------------------------- INT 2F U - Nanosoft, Inc. TurboNET redirector - ??? AX = 8104h BL = ??? BH = ??? CX = ??? DX = ??? DS:SI -> 16-byte buffer containing ??? Return: AL = 00h ??? ----------2F8105----------------------------- INT 2F U - Nanosoft, Inc. TurboNET redirector - ??? AX = 8105h CX = ??? (don't change current value if 0000h) DX = ??? (don't change current value if 0000h) Return: AL = 00h successful ----------2F82------------------------------- INT 2F U - Nanosoft, Inc. TurboNET - ??? AH = 82h ??? Return: ??? Note: called by TNR.EXE, the TurboNET redirector configuration program SeeAlso: AX=8100h ----------2F8200----------------------------- INT 2F - RESPLAY - SAMPLE/PLAYBACK AX = 8200h DX:DI -> start of sample space CX:BX = length in bytes Return: AX = status 1000h successful 2000h not initialized (see AX=8210h) other RESPLAY not installed Note: RESPLAY is a freeware sound sampling/playback utility by Mark J. Cox SeeAlso: AX=8201h,AX=8210h ----------2F8201----------------------------- INT 2F - RESPLAY - INSTALLATION CHECK AX = 8201h Return: AX = 7746h if installed SeeAlso: AX=8202h ----------2F8202----------------------------- INT 2F - RESPLAY - UNINSTALL AX = 8202h Return: AX = status 1000h successful SeeAlso: AX=8201h ----------2F8210----------------------------- INT 2F - RESPLAY - INITIALIZE AX = 8210h BL = sound device 00h printer port LPT1 01h printer port LPT2 02h prototype board at I/O address 0300h 03h printer port (alternative LPT1) 04h internal speaker BH = sample rate in multiples of 250 Hz (14h to A0h) CL = direction 00h playback 01h sample Return: AX = status 1000h successful 2000h parameter out of range other RESPLAY not installed SeeAlso: AX=8200h ----------2F86------------------------------- INT 2F U - ??? AH = 86h AL = function (at least 06h and 07h) ??? Return: ??? Note: called by Codeview for Windows SeeAlso: AH=44h ----------2F8900----------------------------- INT 2F - WHOA!.COM - INSTALLATION CHECK AX = 8900h Return: AL = 00h not installed = FFh installed Note: WHOA!.COM is a system slow-down utility by Brad D Crandall SeeAlso: AX=8901h,AX=8902h ----------2F8901----------------------------- INT 2F - WHOA!.COM - UNINSTALL AX = 8901h Return: AL = FDh successful = FEh error Note: WHOA!.COM is a system slow-down utility by Brad D Crandall SeeAlso: AX=8900h ----------2F8902----------------------------- INT 2F - WHOA!.COM - SET DELAY COUNT AX = 8902h BX = delay count (larger values slow system down more) Return: AL = FDh successful = FEh error Note: WHOA!.COM is a system slow-down utility by Brad D Crandall SeeAlso: AX=8900h ----------2F9000----------------------------- INT 2F U - RAID - INSTALLATION CHECK AX = 9000h Return: AL = FFh if installed Note: RAID (Resident AID) is a TSR utility program by Ross Neilson Wentworth that resides mostly in EMS ----------2F9001----------------------------- INT 2F U - RAID - GET ??? AX = 9001h Return: DX:AX -> ??? SeeAlso: AX=9000h ----------2F9002----------------------------- INT 2F U - RAID - GET RESIDENT SEGMENT AX = 9002h Return: AX = segment of resident (conventional memory) portion SeeAlso: AX=9000h ----------2F9003----------------------------- INT 2F U - RAID - UNINSTALL AX = 9003h Return: ??? SeeAlso: AX=9000h ----------2F9004----------------------------- INT 2F U - RAID - GET ??? AX = 9004h Return: AX = first available paragraph past end of resident portion??? CX destroyed SeeAlso: AX=9000h ----------2F92------------------------------- INT 2F - Couriers LAN E-Mail - API AH = 92h AL = function 00h installation check 01h uninstall 02h pop down MICRO.EXE notification window 03h ??? 04h ??? 05h ??? Return: ??? SeeAlso: AH=9Ch ----------2F93------------------------------- INT 2F - InnerMission v1.7+ - INSTALLATION CHECK AH = 93h BX = CX = AX Return: AL = FFh if installed and BX=CX=AX on entry BX = segment of resident code = 01h if installed but BX or CX differ from AX Note: InnerMission is a shareware graphical screen blanker by Kevin Stokes ----------2F9C------------------------------- INT 2F - Couriers LAN E-Mail OPERATOR.EXE - API AH = 9Ch AL = subfunction 01h uninstall Return: ??? SeeAlso: AH=92h ----------2FA1--BX0081----------------------- INT 2F - Ergo DOS extenders - INSTALLATION CHECK AH = A1h BX = 0081h AL = which FEh OS/286,OS/386 FFh HummingBoard DOS extender ES:DI -> 16-byte buffer Return: if installed, first four bytes of ES:DI buffer are "IABH" Note: since TKERNEL is a licensed version, it is likely that subfunctions BX=0082h and BX=0084h are present and function identically to the AX=FBA1h/BX=008xh calls SeeAlso: AX=ED00h,AX=FBA1h,INT 15/AX=BF02h ----------2FA189----------------------------- INT 2F U - Biologic HRAMDEV.SYS - API AX = A189h BX = subfunction 0000h set ??? 0001h remove ??? 0002h get status ??? 0003h enable ??? 0004h disable ??? 0005h set ??? flag 0006h clear ??? flag 0007h set ??? flag 0008h clear ??? flag 0009h set ??? ES:DI -> function-specific arguments if func 0000h: 20-byte buffer containing ??? if func 0001h: 20-byte buffer for returned ??? if func 0002h: 16-byte buffer for returned ??? if func 0009h: WORD containing ??? Return: BX = A189h if installed AH = status 00h successful FFh failed or invalid function number Notes: HRAMDEV.SYS is a part of the shareware package HRAM by Biologic which provides improved high memory access under MSDOS 5.0 functions 00h and 01h use a stack of four entries; function 01h always removes the values stored with the most recent function 00h call which has not yet been matched with a function 01h call. ----------2FA4E0----------------------------- INT 2F - Futurus Team - INSTALLATION CHECK AX = A4E0h Return: AL = 52h ("R") if installed AH = major version plus 30h ("0") ES:BX -> ??? (INT A4 handler???) Note: older versions of Right Hand Man (from which Team evolved) store the signature "RH" at offset 103h in the INT 2F handler's segment SeeAlso: INT A4"Right Hand Man" ----------2FA900----------------------------- INT 2F - METZTSR.COM - INSTALLATION CHECK AX = A900h CF set Return: CF clear if resident AX = 97FFh CF set if not present Notes: METZTSR.COM prevents METZ applications (such as the MAGIC screen saver) inactivity timeout while running a DOSapp under MS Windows. the default multiplex number is A9h, but may be set to any value from 80h to FFh with a commandline switch SeeAlso: AX=A901h,AX=A902h ----------2FA901----------------------------- INT 2F - METZTSR.COM - GET TIME OF LAST KEYBOARD ACTIVITY AX = A901h CF set Return: CF clear if successful AX:DX = BIOS time at which INT 09 was last invoked CF set if not present SeeAlso: INT 09,INT 1A/AH=00h ----------2FA902----------------------------- INT 2F - METZTSR.COM - SET METZ Ctrl-Alt-Del FLAG AX = A902h BL = new value 00h Ctrl-Alt-Del not allowed else Ctrl-Alt-Del allowed (startup default is 01h) CF set Return: CF clear if successful AX = 97FFh CF set if not resident SeeAlso: AX=A903h ----------2FA903----------------------------- INT 2F - METZTSR.COM - GET METZ Ctrl-Alt-Del FLAG AX = A903h CF set Return: CF clear if successful AX = 97FFh if Ctrl-Alt-Del allowed AX = 0000h if Ctrl-Alt-Del not allowed CF set if not resident SeeAlso: AX=A902h ----------2FAA00----------------------------- INT 2F - VIDCLOCK.COM - INSTALLATION CHECK AX = AA00h Return: AL = 00h not installed FFh installed Note: VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III ----------2FAB00----------------------------- INT 2F - Btrieve Multi-User - INSTALLATION CHECK AX = AB00h Return: AL = 4Dh if installed SeeAlso: AX=AB01h,AX=AB02h,INT 21/AX=3000h"Btrieve",INT 7B"Btrieve" ----------2FAB01----------------------------- INT 2F - Btrieve Multi-User - EXECUTE Btrieve OPERATION AX = AB01h BX = process ID DS:DX -> 38-byte parameter record (see INT 7B"Btrieve") Return: AL = 00h OK = other retry after calling INT 7F/AX=0200h SeeAlso: AX=AB00h,AX=AB02h,INT 7B"Btrieve",INT 7F/AX=0200h ----------2FAB02----------------------------- INT 2F - Btrieve Multi-User - GET NEW PROCESS ID AX = AB02h Return: AL = 00h succesful BX = process ID AL > 00h failed, retry after calling INT 7F/AX=0200h SeeAlso: AX=AB00h,AX=AB01h,INT 7B"Btrieve",INT 7F/AX=0200h ----------2FAC00----------------------------- INT 2F - DOS 4.01+ GRAPHICS.COM - INSTALLATION CHECK AX = AC00h Return: AX = FFFFh ES:DI -> ??? (graphics data?) (not documented) Note: this installation check was moved here to avoid the conflict with the CD-ROM extensions that occurred in DOS 4.00 SeeAlso: AX=1500h"GRAPHICS" ----------2FAD00----------------------------- INT 2F U - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK AX = AD00h Return: AL = FFh if installed BX = ??? (0100h in MS-DOS 3.30, PCDOS 4.01) Note: DOS 5.0 DISPLAY.SYS chains to previous handler if AL is not one of the subfunctions listed here ----------2FAD01----------------------------- INT 2F U - DOS 3.3+ DISPLAY.SYS internal - SET ACTIVE CODE PAGE AX = AD01h BX = new code page Return: CF clear if successful AX = 0001h CF set on error (unsupported code page) AX = 0000h SeeAlso: AX=AD02h ----------2FAD02----------------------------- INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET ACTIVE CODE PAGE AX = AD02h Return: CF set if code page never set AX = 0001h BX = FFFFh (assume first hardware code page) CF clear if successful BX = current code page SeeAlso: AX=AD01h,AX=AD03h ----------2FAD03----------------------------- INT 2F U - DOS 3.3+ DISPLAY.SYS internal - GET CODE PAGE INFORMATION AX = AD03h ES:DI -> buffer for code page information (see below) CX = size of buffer in bytes Return: CF set if buffer too small CF clear if successful ES:DI buffer filled SeeAlso: AX=AD01h,AX=AD02h Format of DOS 5.0 code page information: Offset Size Description 00h WORD number of software code pages 02h WORD ??? (0003h) 04h WORD number of hardware code pages 06h N WORDs hardware code page numbers N WORDs software (prepared) code pages (FFFFh if not yet prepared) ----------2FAD04----------------------------- INT 2F U - DOS 4.x only DISPLAY.SYS internal - ??? AX = AD04h ??? Return: ??? ----------2FAD10----------------------------- INT 2F U - DOS 4.x DISPLAY.SYS internal - INSTALLATION CHECK??? AX = AD10h ??? Return: AX = FFFFh BX = ??? (0100h in PCDOS 4.01) ----------2FAD10----------------------------- INT 2F U - DOS 5.0 DISPLAY.SYS internal - ??? AX = AD10h ??? Return: CF clear if successful CF set on error Note: this function is a NOP if the active code page has never been set (AX=AD02h returns BX=FFFFh); its purpose otherwise is not known ----------2FAD40----------------------------- INT 2F - DOS 4.0 - ??? AX = AD40h DX = ??? ??? Return: ??? Note: called by PCDOS 4.01 PRINT.COM ----------2FAD80----------------------------- INT 2F u - DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK AX = AD80h Return: AL = FFh if installed BX = version number (BH = major, BL = minor) ES:DI -> internal data (see below) Notes: MSDOS 3.30, PCDOS 4.01, and MSDOS 5.00 all report version 1.00. undocumented prior to the release of DOS 5.0 Format of KEYB internal data: Offset Size Description 00h DWORD original INT 09 04h DWORD original INT 2F 08h 6 BYTEs ??? 0Eh WORD flags 10h BYTE ??? 11h BYTE ??? 12h 4 BYTEs ??? 16h 2 BYTEs country ID letters 18h WORD current code page ---DOS 3.3--- 1Ah WORD pointer to first item in list of code page tables??? 1Ch WORD pointer to ??? item in list of code page tables 1Eh 2 BYTEs ??? 20h WORD pointer to key translation data 22h WORD pointer to last item in code page table list (see below) 24h 9 BYTEs ??? ---DOS 4.01--- 1Ah 2 BYTEs ??? 1Ch WORD pointer to first item in list of code page tables??? 1Eh WORD pointer to ??? item in list of code page tables 20h 2 BYTEs ??? 22h WORD pointer to key translation data 24h WORD pointer to last item in code page table list (see below) 26h 9 BYTEs ??? Format of code page table list entries: Offset Size Description 00h WORD pointer to next item, FFFFh = last 02h WORD code page 04h 2 BYTEs ??? Format of translation data: Offset Size Description 00h WORD size of data in bytes, including this word 02h N-2 BYTEs ??? ----------2FAD81----------------------------- INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD CODE PAGE AX = AD81h BX = code page (see INT 21/AX=6601h) Return: CF set on error AX = 0001h (code page not available) CF clear if successful Notes: called by DISPLAY.SYS undocumented prior to the release of DOS 5.0 SeeAlso: AX=AD82h ----------2FAD82----------------------------- INT 2F - DOS 3.3+ KEYB.COM - SET KEYBOARD MAPPING AX = AD82h BL = new state 00h US keyboard (Control-Alt-F1) FFh foreign keyboard (Control-Alt-F2) Return: CF set on error (BL not 00h or FFh) CF clear if successful Note: undocumented prior to the release of DOS 5.0 SeeAlso: AX=AD81h,AX=AD83h ----------2FAD83----------------------------- INT 2F - DOS 5.0 KEYB.COM - GET KEYBOARD MAPPING AX = AD83h Return: BL = current state 00h US keyboard FFh foreign keyboard SeeAlso: AX=AD82h ----------2FAE00DXFFFF----------------------- INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALLATION CHECK AX = AE00h DX = FFFFh CH = FFh CL = length of command line tail (4DOS v4.0) DS:BX -> command line buffer (see below) DS:SI -> command name buffer (see below) DI = 0000h (4DOS v4.0) Return: AL = FFh if this command is a TSR extension to COMMAND.COM AL = 00h if the command should be executed as usual Notes: This call provides a mechanism for TSRs to install permanent extensions to the command repertoire of COMMAND.COM. It appears that COMMAND.COM makes this call before executing the current command line, and does not execute it itself if the return is FFh. APPEND hooks this call, to allow subsequent APPEND commands to execute without re-running APPEND Format of command line buffer: Offset Size Description 00h BYTE max length of command line, as in INT 21/AH=0Ah 01h BYTE count of bytes to follow, excluding terminating 0Dh N BYTEs command line text, terminated by 0Dh Format of command name buffer: Offset Size Description 00h BYTE length of command name 01h N BYTEs uppercased command name (blank-padded to 11 chars by 4DOS v4) ----------2FAE01DXFFFF----------------------- INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE AX = AE01h DX = FFFFh CH = 00h CL = length of command name (4DOS v4.0) DS:SI -> command name buffer (see AX=AE00h) DS:BX -> command line buffer (see AX=AE00h) Return: DS:SI buffer updated if length byte is nonzero, the following bytes contain the uppercase internal command to execute and the command line buffer contains the command's parameters (the first DS:[SI] bytes are ignored) Notes: this call requests execution of the command which a previous call to AX=AE00h indicated was resident APPEND hooks this call ----------2FB000----------------------------- INT 2F - DOS 3.3+ GRAFTABL.COM - INSTALLATION CHECK AX = B000h Return: AL = 00h not installed, OK to install = 01h not installed, not OK to install = FFh installed Notes: called by DISPLAY.SYS documented for DOS 5.0, but undocumented in prior versions SeeAlso: AX=B001h ----------2FB001----------------------------- INT 2F - DOS 3.3+ GRAFTABL.COM - GET GRAPHICS FONT TABLE AX = B001h DS:BX -> DWORD buffer for address of 8x8 font table Return: buffer filled AL = FFh Note: PCDOS 3.30/4.01 set the font table offset to 0130h, MSDOS 3.30 to 0030h SeeAlso: AX=B000h ----------2FB400----------------------------- INT 2F - IBM PC3270 EMULATION PROG v3 - INSTALLATION CHECK AX = B400h Return: AL = FFh if installed ----------2FB401----------------------------- INT 2F - IBM PC3270 EMULATION PROG v3 - GET HOST BUFFER ADDRESS AX = B401h Return: ES -> host screen buffer (PC ASCII format) ES unchanged if communications not started ----------2FB402----------------------------- INT 2F - IBM PC3270 EMULATION PROG v3 - ??? AX = B402h BX = ??? Return: ??? ----------2FB403----------------------------- INT 2F - IBM PC3270 EMULATION PROG v3 - ??? AX = B403h ??? Return: ??? ----------2FB404----------------------------- INT 2F - IBM PC3270 EMULATION PROG v3 - ??? AX = B404h ??? Return: ??? ----------2FB405----------------------------- INT 2F - IBM PC3270 EMULATION PROG v3 - ??? AX = B405h ??? Return: ??? ----------2FB700----------------------------- INT 2F - APPEND - INSTALLATION CHECK AX = B700h Return: AL = status 00h not installed FFh installed Note: MSDOS 3.30 APPEND refuses to install itself when run inside TopView or a TopView-compatible environment ----------2FB701----------------------------- INT 2F U - APPEND - ??? AX = B701h ??? Return: ??? Note: MSDOS 3.30 APPEND displays "Incorrect APPEND Version" and aborts caller ----------2FB702----------------------------- INT 2F - APPEND - VERSION CHECK AX = B702h Return: AX = FFFFh if not DOS 4.0 APPEND (also if DOS 5.0 APPEND) AL = major version number AH = minor version number, otherwise SeeAlso: AX=B710h ----------2FB703----------------------------- INT 2F U - DOS 3.3, DOS 5.0 APPEND - HOOK INT 21 AX = B703h ES:DI -> INT 21 handler APPEND should chain to Return: ES:DI -> APPEND's INT 21 handler Note: each invocation of this function toggles a flag which APPEND uses to determine whether to chain to the user handler or the original INT 21 ----------2FB704----------------------------- INT 2F - DOS 3.3+ APPEND - GET APPEND PATH AX = B704h Return: ES:DI -> active APPEND path (128 bytes max) ----------2FB706----------------------------- INT 2F - DOS 4+ APPEND - GET APPEND FUNCTION STATE AX = B706h Return: BX = APPEND state bit 0: set if APPEND enabled bits 1-11 reserved bit 12: (DOS 5.0) set if APPEND applies directory search even if a drive has been specified bit 13: set if /PATH flag active bit 14: set if /E flag active (environment var APPEND exists) bit 15: set if /X flag active ----------2FB707----------------------------- INT 2F - DOS 4+ APPEND - SET APPEND FUNCTION STATE AX = B707h BX = APPEND state bits (see AX=B706h) ----------2FB710----------------------------- INT 2F U - DOS 3.3+ APPEND - GET VERSION INFO AX = B710h Return: AX = current APPEND state (see AX=B706h) BX = ??? (0000h in MSDOS 3.30 and 5.00) CX = ??? (0000h in MSDOS 3.30 and 5.00) DL = major version DH = minor version SeeAlso: AX=B702h ----------2FB711----------------------------- INT 2F - DOS 4+ APPEND - SET RETURN FOUND NAME STATE AX = B711h Note: if the next INT 21h call (and ONLY the next) is function 3Dh, 43h, or 6Ch (also 4B03h and 4Eh if /X active), the fully qualified filename is written over top of the filename passed to the INT 21h call. The application must provide a sufficiently large buffer. This state is reset after the next INT 21h call processed by APPEND. BUG: DOS 4.0 APPEND reportedly overwrites DS:DX instead of DS:SI for INT 21/AH=6Ch SeeAlso: INT 21/AH=4Eh ----------2FB800----------------------------- INT 2F - network - INSTALLATION CHECK AX = B800h Return: AL = status 00h not installed nonzero installed BX = installed component flags (test in this order!) bit 6 server bit 2 messenger bit 7 receiver bit 3 redirector ----------2FB803----------------------------- INT 2F - network - GET NETWORK EVENT POST HANDLER AX = B803h Return: ES:BX -> event post handler (see AX=B804h) SeeAlso: AX=B804h,AX=B903h ----------2FB804----------------------------- INT 2F - network - SET NETWORK EVENT POST HANDLER AX = B804h ES:BX -> new event post handler Notes: used in conjunction with AX=B803h to hook into the network event post routine The specified handler is called on any network event. Two events are defined: message received and critical network error. SeeAlso: AX=B803h,AX=B904h Values post routine is called with: AX = 0000h single block message DS:SI -> ASCIZ originator name DS:DI -> ASCIZ destination name ES:BX -> text header (see below) AX = 0001h start multiple message block CX = block group ID DS:SI -> ASCIZ originator name DS:DI -> ASCIZ destination name AX = 0002h multiple block text CX = block group ID ES:BX -> text header (see below) AX = 0003h end multiple block message CX = block group ID AX = 0004h message aborted due to error CX = block group ID AX = 0101h server received badly formatted network request Return: AX = FFFFh (PC LAN will process error) AX = 0102h unexpected network error ES:BX -> NCB (see INT 5C) AX = 0103h server received INT 24 error other registers as for INT 24, except AH is in BH Return: as below, but only 0000h and FFFFh allowed Return: AX = response code 0000h user post routine processed message 0001h PC LAN will process message, but message window not displayed FFFFh PC LAN will process message Format of text header: Offset Size Description 00h WORD length of text (maximum 512 bytes) 02h N BYTEs text of message Note: all CRLF sequences in message text are replaced by 14h ----------2FB807----------------------------- INT 2F - Network - GET NetBIOS NAME NUMBER OF MACHINE NAME AX = B807h Return: CH = NetBIOS name number of the machine name SeeAlso: INT 21/AX=5E00h ----------2FB808----------------------------- INT 2F U - Network - RELINK KEYBOARD HANDLER AX = B808h ES:BX -> INT 09 handler network should call after it finishes INT 09 Notes: this call replaces the address to which the network software chains on an INT 09 without preserving the original value. This allows a prior handler to unlink, but does not allow a new handler to be added such that the network gets the INT 09 first unless the new handler completely takes over INT 09 and never chains. called by DOS 3.2 KEYBxx.COM SeeAlso: AX=B908h ----------2FB809----------------------------- INT 2F - LANtastic Network, NetWare Lite - VERSION CHECK AX = B809h Return: AH = major version AL = minor version (decimal) ----------2FB900----------------------------- INT 2F - PC Network RECEIVER.COM - INSTALLATION CHECK AX = B900h Return: AL = 00h if not installed FFh if installed ----------2FB901----------------------------- INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM INT 2F HANDLER ADDRESS AX = B901h Return: AL = ??? ES:BX -> RECEIVER.COM INT 2F handler Note: allows more efficient execution by letting the caller bypass any other INT 2F handlers which have been added since RECEIVER.COM was installed ----------2FB903----------------------------- INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM POST ADDRESS AX = B903h Return: ES:BX -> POST handler SeeAlso: AX=B803h,AX=B904h ----------2FB904----------------------------- INT 2F - PC Network RECEIVER.COM - SET RECEIVER.COM POST ADDRESS AX = B904h ES:BX -> new POST handler SeeAlso: AX=B804h,AX=B903h ----------2FB905----------------------------- INT 2F - PC Network RECEIVER.COM - GET FILENAME AX = B905h DS:BX -> 128-byte buffer for filename 1 DS:DX -> 128-byte buffer for filename 2 Return: buffers filled from RECEIVER.COM internal buffers Note: use of filenames is unknown, but one appears to be for storing messages SeeAlso: AX=B906h ----------2FB906----------------------------- INT 2F - PC Network RECEIVER.COM - SET FILENAME AX = B906h DS:BX -> 128-byte buffer for filename 1 DS:DX -> 128-byte buffer for filename 2 Return: RECEIVER.COM internal buffers filled from user buffers Note: use of filenames is unknown, but one appears to be for storing messages SeeAlso: AX=B905h ----------2FB908----------------------------- INT 2F - PC Network RECEIVER.COM - UNLINK KEYBOARD HANDLER AX = B908h ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09 Note: this call replaces the address to which RECEIVER.COM chains on an INT 09 without preserving the original value. This allows a prior handler to unlink, but does not allow a new handler to be added such that RECEIVER gets the INT 09 first. SeeAlso: AX=B808h ----------2FBC00----------------------------- INT 2F - Windows 3.0, DOS 5.0 EGA.SYS - INSTALLATION CHECK AX = BC00h Return: AL = 00h not installed, OK to install = 01h not installed, not OK to install = FFh installed BX = 5456h ("TV") Note: AH=BCh is the default value, which may be changed by a command line parameter to any value between 80h and FFh SeeAlso: AX=BC06h,INT 10/AH=FAh"EGA" ----------2FBC06----------------------------- INT 2F U - MS Windows 3.0, DOS 5.0 EGA.SYS - GET VERSION INFO AX = BC06h Return: BX = 5456h ("TV") CH = major version CL = minor version DL = revision SeeAlso: AX=BC00h,INT 10/AH=FAh"EGA" ----------2FBE00----------------------------- INT 2F - REDVIEW - INSTALLATION CHECK AX = BE00h Return: AL = FFh if installed Note: REDVIEW is a public-domain TSR by Alexandr Novy and Petr Horak which copies data sent to standard output to standard error when the former has been redirected to a file, thus allowing the data to be seen on the screen at the same time it is captured in a file ----------2FBF00----------------------------- INT 2F - PC LAN PROGRAM REDIRIFS.EXE internal - INSTALLATION CHECK AX = BF00h Return: AL = FFh if installed ----------2FBF01----------------------------- INT 2F U - PC LAN PROGRAM REDIRIFS.EXE internal - ??? AX = BF01h ??? Return: ??? ----------2FBF80----------------------------- INT 2F - PC LAN PROG REDIR.SYS internal - SET REDIRIFS ENTRY POINT AX = BF80h ES:DI -> FAR entry point to IFS handler in REDIRIFS Return: AL = FFh if installed ES:DI -> internal workspace Note: all future IFS calls to REDIR.SYS are passed to the ES:DI entry point --------------------------------------------- Downloaded From P-80 International Information Systems 304-744-2253