Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
back2root:ibm-pc-ms-dos:interrupts:old:ms_interrupt_list-21 [2023/01/05 04:01] – supprimée - modification externe (Unknown date) 127.0.0.1 | back2root:ibm-pc-ms-dos:interrupts:old:ms_interrupt_list-21 [2023/01/05 04:01] (Version actuelle) – créée - modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== MSDOS - Interrupt List 21h ====== | ||
+ | ===== 00h - DOS 1+ - TERMINATE PROGRAM ===== | ||
+ | |||
+ | < | ||
+ | AH = 00h | ||
+ | CS = PSP segment | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | Microsoft recomments using INT 21/AH=4Ch for DOS 2+ execution continues at address stored in INT 22 after DOS performs whatever cleanup it needs to do | ||
+ | |||
+ | if the PSP is its own parent, the process' | ||
+ | |||
+ | not supported by MS Windows 3.0 DOSX.EXE DOS extender | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=26h, | ||
+ | |||
+ | ===== 01h - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO ===== | ||
+ | < | ||
+ | AH = 01h | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = character read | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | ^C/^Break are checked, and INT 23 executed if read | ||
+ | |||
+ | character is echoed to standard output | ||
+ | |||
+ | standard input is always the keyboard and standard output the screen under DOS 1.x, but they may be redirected under DOS 2+ | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=06h, | ||
+ | |||
+ | ===== 02h - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT ===== | ||
+ | |||
+ | AH = 02h | ||
+ | DL = character to write | ||
+ | Return: AL = last character output (despite the official docs which state | ||
+ | nothing is returned) (at least DOS 3.3-5.0) | ||
+ | Notes: | ||
+ | standard output is always the screen under DOS 1.x, but may be | ||
+ | redirected under DOS 2+ | ||
+ | the last character output will be the character in DL unless DL=09h | ||
+ | on entry, in which case AL=20h as tabs are expanded to blanks | ||
+ | SeeAlso: AH=06h, | ||
+ | |||
+ | ===== 03h - DOS 1+ - READ CHARACTER FROM STDAUX ===== | ||
+ | AH = 03h | ||
+ | Return: AL = character read | ||
+ | Notes: | ||
+ | STDAUX is usually the first serial port | ||
+ | SeeAlso: AH=04h,INT 14/ | ||
+ | |||
+ | ===== 04h - DOS 1+ - WRITE CHARACTER TO STDAUX ===== | ||
+ | AH = 04h | ||
+ | DL = character to write | ||
+ | Notes: | ||
+ | STDAUX is usually the first serial port | ||
+ | if STDAUX is busy, this function will wait until it becomes free | ||
+ | SeeAlso: AH=03h,INT 14/ | ||
+ | |||
+ | ===== 05h - DOS 1+ - WRITE CHARACTER TO PRINTER ===== | ||
+ | |||
+ | AH = 05h | ||
+ | DL = character to print | ||
+ | Notes: | ||
+ | STDPRN is usually the first parallel port, but may be redirected under | ||
+ | DOS 2+ | ||
+ | if the printer is busy, this function will wait | ||
+ | SeeAlso: INT 17/AH=00h | ||
+ | |||
+ | ===== 06h - DOS 1+ - DIRECT CONSOLE OUTPUT ===== | ||
+ | |||
+ | AH = 06h | ||
+ | DL = character (except FFh) | ||
+ | Return: AL = character output (despite official docs which state nothing is | ||
+ | returned) (at least DOS 3.3-5.0) | ||
+ | Notes: does not check ^C/^Break | ||
+ | writes to standard output, which is always the screen under DOS 1.x, | ||
+ | but may be redirected under DOS 2+ | ||
+ | SeeAlso: AH=02h, | ||
+ | |||
+ | ===== 06h - FFh - DOS 1+ - DIRECT CONSOLE INPUT ===== | ||
+ | |||
+ | AH = 06h | ||
+ | DL = FFh | ||
+ | Return: ZF set if no character available | ||
+ | ZF clear if character available | ||
+ | AL = character read | ||
+ | Notes: | ||
+ | if the returned character is 00h, the user pressed a key with an | ||
+ | extended keycode, which will be returned by the next call of this | ||
+ | function | ||
+ | reads from standard input, which is always the keyboard under DOS 1.x, | ||
+ | but may be redirected under DOS 2+ | ||
+ | SeeAlso: AH=0Bh | ||
+ | |||
+ | ===== 07h - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO ===== | ||
+ | |||
+ | AH = 07h | ||
+ | Return: AL = character read from standard input | ||
+ | Notes: does not check ^C/^Break | ||
+ | standard input is always the keyboard under DOS 1.x, but may be | ||
+ | redirected under DOS 2+ | ||
+ | if the interim console flag is set (see AX=6301h), partially-formed | ||
+ | double-byte characters may be returned | ||
+ | SeeAlso: AH=01h, | ||
+ | |||
+ | ===== 08h - DOS 1+ - CHARACTER INPUT WITHOUT ECHO ===== | ||
+ | |||
+ | AH = 08h | ||
+ | Return: AL = character read from standard input | ||
+ | Notes: | ||
+ | standard input is always the keyboard under DOS 1.x, but may be | ||
+ | redirected under DOS 2+ | ||
+ | if the interim console flag is set (see AX=6301h), partially-formed | ||
+ | double-byte characters may be returned | ||
+ | SeeAlso: AH=01h, | ||
+ | |||
+ | ===== 09h - DOS 1+ - WRITE STRING TO STANDARD OUTPUT ===== | ||
+ | |||
+ | AH = 09h | ||
+ | DS:DX -> ' | ||
+ | Return: AL = 24h (the ' | ||
+ | state that nothing is returned) (at least DOS 3.3-5.0) | ||
+ | Notes: | ||
+ | standard output is always the screen under DOS 1.x, but may be | ||
+ | redirected under DOS 2+ | ||
+ | SeeAlso: AH=02h, | ||
+ | |||
+ | ===== 0Ah ===== | ||
+ | |||
+ | ==== 0Ah - DOS 1+ - BUFFERED INPUT ==== | ||
+ | |||
+ | AH = 0Ah | ||
+ | DS:DX -> buffer (see below) | ||
+ | Return: buffer filled with user input | ||
+ | Notes: | ||
+ | reads from standard input, which may be redirected under DOS 2+ | ||
+ | if the maximum buffer size (see below) is set to 00h, this call returns | ||
+ | immediately without reading any input | ||
+ | SeeAlso: AH=0Ch,INT 2F/AX=4810h | ||
+ | |||
+ | Format of input buffer: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | (return) number of characters actually read, excluding CR | ||
+ | | ||
+ | |||
+ | ==== 0A00h - WCED v1.6 - INSTALLATION CHECK ==== | ||
+ | |||
+ | AX = 0A00h | ||
+ | DS:DX -> 6-byte buffer whose first two bytes must be 00h | ||
+ | Return: buffer offset 02h-05h filled with " | ||
+ | Note: WCED is a free command-line editor and history utility by Stuart | ||
+ | Russell | ||
+ | SeeAlso: AH=FFh" | ||
+ | |||
+ | ===== 0Bh ===== | ||
+ | |||
+ | ==== 0Bh - DOS 1+ - GET STDIN STATUS ==== | ||
+ | |||
+ | AH = 0Bh | ||
+ | Return: AL = 00h if no character available | ||
+ | = FFh if character is available | ||
+ | Notes: | ||
+ | standard input is always the keyboard under DOS 1.x, but may be | ||
+ | redirected under DOS 2+ | ||
+ | if the interim console flag is set (see AX=6301h), this function | ||
+ | returns AL=FFh if a partially-formed double-byte character is | ||
+ | available | ||
+ | SeeAlso: AH=06h" | ||
+ | |||
+ | ==== 0B56h - VIRUS - " | ||
+ | |||
+ | AX = 0B56h | ||
+ | Return: AX = 4952h if resident | ||
+ | SeeAlso: AX=0D20h | ||
+ | |||
+ | ===== 0Ch - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT ===== | ||
+ | |||
+ | AH = 0Ch | ||
+ | AL = STDIN input function to execute after flushing buffer | ||
+ | other registers as appropriate for the input function | ||
+ | Return: as appropriate for the specified input function | ||
+ | Note: if AL is not one of 01h, | ||
+ | no input is attempted | ||
+ | SeeAlso: AH=01h, | ||
+ | |||
+ | ===== 0Dh ===== | ||
+ | |||
+ | ==== 0Dh - DOS 1+ - DISK RESET ==== | ||
+ | |||
+ | AH = 0Dh | ||
+ | Notes: | ||
+ | information (that is only done when files are closed or a SYNC call | ||
+ | is issued) | ||
+ | SeeAlso: AX=5D01h, | ||
+ | |||
+ | ==== 0D20h - VIRUS - "Crazy Imp" - INSTALLATION CHECK ==== | ||
+ | |||
+ | AX = 0D20h | ||
+ | Return: AX = 1971h if resident | ||
+ | SeeAlso: AX=0B56h, | ||
+ | |||
+ | ===== 0Eh - DOS 1+ - SELECT DEFAULT DRIVE ===== | ||
+ | |||
+ | AH = 0Eh | ||
+ | DL = new default drive (00h = A:, 01h = B:, etc) | ||
+ | Return: AL = number of potentially valid drive letters | ||
+ | Notes: | ||
+ | drives that NetWare supports | ||
+ | under DOS 3+, the return value is the greatest of 5, the value of | ||
+ | LASTDRIVE= in CONFIG.SYS, and the number of drives actually present | ||
+ | on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy | ||
+ | may be accessed as either A: or B: | ||
+ | otherwise, the return value is the highest drive actually present | ||
+ | DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives, | ||
+ | and 3+ a maximum of 26 drives | ||
+ | SeeAlso: AH=19h, | ||
+ | |||
+ | ===== 0Fh - DOS 1+ - OPEN FILE USING FCB ===== | ||
+ | < | ||
+ | AH = 0Fh | ||
+ | DS:DX -> unopened File Control Block (see below) | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | FFh file not found or access denied | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | (DOS 3.1+) file opened for read/write in compatibility mode | ||
+ | |||
+ | an unopened FCB has the drive, filename, and extension fields filled in and all other bytes cleared | ||
+ | |||
+ | not supported by MS Windows 3.0 DOSX.EXE DOS extender | ||
+ | </ | ||
+ | SeeAlso: AH=10h, | ||
+ | |||
+ | === Format of File Control Block: === | ||
+ | ^ Offset | ||
+ | | -7 | BYTE | extended FCB if FFh | | ||
+ | | -6 | 5 BYTEs | reserved | ||
+ | | -1 | BYTE | file attribute if extended FCB | | ||
+ | | 00h | BYTE | drive number (0 = default, 1 = A, etc) | | ||
+ | | 01h | 8 BYTEs | blank-padded file name | | ||
+ | | 09h | 3 BYTEs | blank-padded file extension | ||
+ | | 0Ch | WORD | current block number | ||
+ | | 0Eh | WORD | logical record size | | ||
+ | | 10h | DWORD | file size | | ||
+ | | 14h | WORD | date of last write (see AX=5700h) | ||
+ | | 16h | WORD | time of last write (see AX=5700h) (DOS 1.1+) | | ||
+ | | 18h | 8 BYTEs | reserved (see below) | ||
+ | | 20h | BYTE | record within current block | | ||
+ | | 21h | DWORD | random access record number (if record size is > 64 bytes, high byte is omitted) | ||
+ | |||
+ | <WRAP round box> | ||
+ | to use an extended FCB, you must specify the address of the FFh flag at offset -7, rather than the address of the drive number field | ||
+ | </ | ||
+ | |||
+ | === Format of reserved field for DOS 1.0: === | ||
+ | ^ Offset | ||
+ | | 16h | WORD | location in directory (if high byte = FFh, low byte is device ID) | | ||
+ | | 18h | WORD | number of first cluster in file | | ||
+ | | 1Ah | WORD | last cluster number accessed (absolute) | ||
+ | | 1Ch | WORD | relative current cluster number | ||
+ | | 1Eh | BYTE | dirty flag (00h = not dirty) | ||
+ | | 1Fh | BYTE | unused | ||
+ | |||
+ | === Format of reserved field for DOS 1.10-1.25: === | ||
+ | ^ Offset | ||
+ | | 18h | BYTE | bit 7: set if logical device\\ bit 6: not dirty\\ bits 5-0: disk number or logical device ID | | ||
+ | | 19h | WORD | starting cluster number | ||
+ | | 1Bh | WORD | absolute current cluster number | ||
+ | | 1Dh | WORD | relative current cluster number | ||
+ | | 1Fh | BYTE | unused | ||
+ | |||
+ | === Format of reserved field for DOS 2.x: === | ||
+ | ^ Offset | ||
+ | |18h |BYTE | bit 7: set if logical device\\ bit 6: set if open???\\ bits 5-0: ??? | | ||
+ | |19h |WORD | starting cluster number | ||
+ | |1Bh |WORD | ??? | | ||
+ | |1Dh |BYTE | ??? | | ||
+ | |1Eh |BYTE | ??? | | ||
+ | |1Fh |BYTE | ??? | | ||
+ | |||
+ | === Format of reserved field for DOS 3.x: === | ||
+ | ^Offset ^ Size ^Description^ | ||
+ | | 18h |BYTE |number of system file table entry for file| | ||
+ | | 19h |BYTE |attributes\\ bits 7,6: \\ * 00 = SHARE.EXE not loaded, disk file\\ | ||
+ | | 1Ah |WORD |starting cluster of file| | ||
+ | | 1Ch |WORD |(DOS 3.x) offset within SHARE of sharing record (see AH=52h)\\(DOS 5.0) unique sequence number of sharing record| | ||
+ | | 1Eh |BYTE |file attribute| | ||
+ | | 1Fh |BYTE |??? | ||
+ | |---SHARE.EXE loaded, remote file---||| | ||
+ | | 1Ah |WORD |number of sector containing directory entry| | ||
+ | | 1Ch |WORD |relative cluster within file of last cluster accessed| | ||
+ | | 1Eh |BYTE |absolute cluster number of last cluster accessed| | ||
+ | | 1Fh |BYTE |??? | ||
+ | |---SHARE.EXE not loaded---||| | ||
+ | | 1Ah |BYTE |(low byte of device attribute word AND 0Ch) OR open mode| | ||
+ | | 1Bh |WORD |starting cluster of file| | ||
+ | | 1Dh |WORD |number of sector containing directory entry| | ||
+ | | 1Fh |BYTE |number of directory entry within sector| | ||
+ | |||
+ | <WRAP round box > | ||
+ | if FCB opened on character device, DWORD at 1Ah is set to the address of the device driver header, then the BYTE at 1Ah is overwritten. | ||
+ | </ | ||
+ | ===== 10h - DOS 1+ - CLOSE FILE USING FCB ===== | ||
+ | |||
+ | AH = 10h | ||
+ | DS:DX -> File Control Block (see AH=0Fh) | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | FFh failed | ||
+ | Notes: a successful close forces all disk buffers used by the file to be | ||
+ | written and the directory entry to be updated | ||
+ | not supported by MS Windows 3.0 DOSX.EXE DOS extender | ||
+ | SeeAlso: AH=0Fh, | ||
+ | |||
+ | ===== 11h - DOS 1+ - FIND FIRST MATCHING FILE USING FCB ===== | ||
+ | < | ||
+ | AH = 11h | ||
+ | DS:DX -> unopened FCB (see AH=0Fh), may contain '?' | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | [DTA] unopened FCB for first matching file | ||
+ | FFh no matching filename, or bad FCB | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | the type of the returned FCB depends on whether the input FCB was a normal or an extended FCB | ||
+ | |||
+ | for extended FCBs with search attribute 08h, the volume label (if any) will be returned even if the current directory is not the root dir. | ||
+ | |||
+ | DOS 3+ also allows the ' | ||
+ | |||
+ | the search FCB must not be modified if AH=12h will be used to continue searching; DOS 3.3 has set the following parts of the FCB: | ||
+ | < | ||
+ | 0Ch BYTE ??? | ||
+ | 0Dh WORD directory entry number of matching file | ||
+ | 0Fh WORD cluster number of current directory | ||
+ | 11h 4 BYTEs ??? | ||
+ | 15h BYTE drive number (1=A:) | ||
+ | </ | ||
+ | |||
+ | at least for DOS 3.3, the unopened FCB in the DTA is actually the drive number followed by the file's directory entry | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== 12h - DOS 1+ - FIND NEXT MATCHING FILE USING FCB ===== | ||
+ | < | ||
+ | AH = 12h | ||
+ | DS:DX -> unopened FCB (see AH=0Fh) | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | [DTA] = unopened FCB | ||
+ | FFh no more matching filenames | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | (see AH=11h) | ||
+ | |||
+ | assumes that successful FindFirst executed on search FCB before call | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=1Ah, | ||
+ | |||
+ | ===== 13h - DOS 1+ - DELETE FILE USING FCB ===== | ||
+ | < | ||
+ | AH = 13h | ||
+ | DS:DX -> unopened FCB (see AH=0Fh), filename filled with template for deletion ('?' | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h one or more files successfully deleted | ||
+ | FFh no matching files or all were read-only or locked | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | DOS 1.25+ deletes everything in the current directory (including subdirectories) and sets the first byte of the name to 00h (entry never used) instead of E5h if called on an extended FCB with filename '???????????' | ||
+ | |||
+ | currently-open files should not be deleted | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=41h,INT 2F/AX=1113h | ||
+ | |||
+ | ===== 14h - DOS 1+ - SEQUENTIAL READ FROM FCB FILE ===== | ||
+ | < | ||
+ | AH = 14h | ||
+ | DS:DX -> opened FCB (see AH=0Fh) | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | 01h end of file (no data) | ||
+ | 02h segment wrap in DTA | ||
+ | 03h end of file, partial record read | ||
+ | [DTA] = record read from file | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | reads a record of the size specified in the FCB beginning at the current file position, then updates the current block and current record fields in the FCB | ||
+ | |||
+ | if a partial record was read, it is zero-padded to the full size not supported by MS Windows 3.0 DOSX.EXE DOS extender | ||
+ | |||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=0Fh, | ||
+ | |||
+ | ===== 15h - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE ===== | ||
+ | < | ||
+ | AH = 15h | ||
+ | DS:DX -> opened FCB (see AH=0Fh) | ||
+ | [DTA] = record to write | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | 01h disk full | ||
+ | 02h segment wrap in DTA | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | Notes: | ||
+ | |||
+ | if less than a full sector is written, the data is placed in a DOS buffer to be written out at a later time | ||
+ | |||
+ | not supported by MS Windows 3.0 DOSX.EXE DOS extender | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=0Fh, | ||
+ | |||
+ | ===== 16h - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB ===== | ||
+ | |||
+ | AH = 16h | ||
+ | DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | FFh directory full or file exists and is read-only or locked | ||
+ | Notes: if file already exists, it is truncated to zero length | ||
+ | if an extended FCB is used, the file is given the attribute in the | ||
+ | FCB | ||
+ | not supported by MS Windows 3.0 DOSX.EXE DOS extender | ||
+ | SeeAlso: AH=0Fh, | ||
+ | |||
+ | ===== 17h - DOS 1+ - RENAME FILE USING FCB ===== | ||
+ | < | ||
+ | AH = 17h | ||
+ | DS:DX -> modified FCB (see also AH=0Fh) | ||
+ | the old filename ('?' | ||
+ | < | ||
+ | </ | ||
+ | Return: AL = status | ||
+ | 00h successfully renamed | ||
+ | FFh no matching files,file is read-only, or new name already exists | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | subdirectories may be renamed using an extended FCB with the appropriate attribute | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=0Fh, | ||
+ | |||
+ | ===== 18h - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY ===== | ||
+ | < | ||
+ | AH = 18h | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = 00h | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | corresponds to the CP/M BDOS function "get bit map of logged drives", | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=1Dh, | ||
+ | |||
+ | ===== 19h - DOS 1+ - GET CURRENT DEFAULT DRIVE ===== | ||
+ | < | ||
+ | AH = 19h | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = drive (00h = A:, 01h = B:, etc) | ||
+ | </ | ||
+ | |||
+ | SeeAlo: AH=0Eh, | ||
+ | |||
+ | ===== 1Ah - DOS 1+ - SET DISK TRANSFER AREA ADDRESS ===== | ||
+ | < | ||
+ | AH = 1Ah | ||
+ | DS:DX -> Disk Transfer Area (DTA) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | the DTA is set to PSP:0080h when a program is started | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=11h, | ||
+ | |||
+ | ===== 1Bh - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE ===== | ||
+ | < | ||
+ | AH = 1Bh | ||
+ | </ | ||
+ | < | ||
+ | |||
+ | Return: AL = sectors per cluster (allocation unit) | ||
+ | CX = bytes per sector | ||
+ | DX = total number of clusters | ||
+ | DS:BX -> media ID byte (see below) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | under DOS 1.x, DS:BX points at an actual copy of the FAT; later versions return a pointer to a copy of the FAT's ID byte | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=1Ch, | ||
+ | |||
+ | Values for media ID byte: | ||
+ | |FFh|floppy, | ||
+ | |FEh|floppy, | ||
+ | |FDh|floppy, | ||
+ | |FCh|floppy, | ||
+ | |F9h|floppy, | ||
+ | |F8h|hard disk| | ||
+ | |F0h|other| | ||
+ | |||
+ | ===== 1Ch - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE ===== | ||
+ | < | ||
+ | AH = 1Ch | ||
+ | DL = drive (00h = default, 01h = A:, etc) | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = sectors per cluster (allocation unit) | ||
+ | CX = bytes per sector | ||
+ | DX = total number of clusters | ||
+ | DS:BX -> media ID byte (see AH=1Bh) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | under DOS 1.x, DS:BX points at an actual copy of the FAT; later versions return a pointer to a copy of the FAT's ID byte | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=1Bh, | ||
+ | ===== 1Dh - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY ===== | ||
+ | < | ||
+ | AH = 1Dh | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = 00h | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | corresponds to the CP/M BDOS function "get bit map of read-only drives", | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=18h, | ||
+ | |||
+ | ===== 1Eh - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY ===== | ||
+ | < | ||
+ | AH = 1Eh | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = 00h | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | corresponds to a CP/M BDOS function which is meaningless under MSDOS | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=18h, | ||
+ | |||
+ | ===== 1Fh - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE ===== | ||
+ | < | ||
+ | AH = 1Fh | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | DS:BX -> Drive Parameter Block (DPB) (see below for DOS 1.x, | ||
+ | AH=32h for DOS 2+) | ||
+ | FFh invalid drive | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | documented for DOS 5.0, but undocumented in prior versions | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=32h | ||
+ | |||
+ | Format of DOS 1.1 and MSDOS 1.25 drive parameter block: | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h|BYTE|sequential device ID| | ||
+ | |01h|BYTE|logical drive number (0=A:)| | ||
+ | |02h|WORD|bytes per sector| | ||
+ | |04h|BYTE|highest sector number within a cluster| | ||
+ | |05h|BYTE|shift count to convert clusters into sectors| | ||
+ | |06h|WORD|starting sector number of first FAT| | ||
+ | |08h|BYTE|number of copies of FAT| | ||
+ | |09h|WORD|number of directory entries| | ||
+ | |0Bh|WORD|number of first data sector| | ||
+ | |0Dh|WORD|highest cluster number (number of data clusters + 1)| | ||
+ | |0Fh|BYTE|sectors per FAT| | ||
+ | |10h|WORD|starting sector of directory| | ||
+ | |12h|WORD|address of allocation table| | ||
+ | |||
+ | <WRAP round box> | ||
+ | the DOS 1.0 table is the same except that the first and last fields are missing | ||
+ | </ | ||
+ | |||
+ | ===== 20h - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY ===== | ||
+ | < | ||
+ | AH = 20h | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = 00h | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | corresponds to the CP/M BDOS function " | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=18h, | ||
+ | |||
+ | ===== 21h - DOS 1+ - READ RANDOM RECORD FROM FCB FILE ===== | ||
+ | < | ||
+ | AH = 21h | ||
+ | DS:DX -> opened FCB (see AH=0Fh) | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | 01h end of file, no data read | ||
+ | 02h segment wrap in DTA, no data read | ||
+ | 03h end of file, partial record read | ||
+ | [DTA] = record read from file | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | the record is read from the current file position as specified by the random record and record size fields of the FCB | ||
+ | |||
+ | the file position is not updated after reading the record | ||
+ | |||
+ | if a partial record is read, it is zero-padded to the full size | ||
+ | |||
+ | not supported by MS Windows 3.0 DOSX.EXE DOS extender | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=14h, | ||
+ | |||
+ | ===== 22h - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE ===== | ||
+ | < | ||
+ | AH = 22h | ||
+ | DS:DX -> opened FCB (see AH=0Fh) | ||
+ | [DTA] = record to write | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | 01h disk full | ||
+ | 02h segment wrap in DTA | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | the record is written to the current file position as specified by the random record and record size fields of the FCB | ||
+ | |||
+ | the file position is not updated after writing the record | ||
+ | |||
+ | if the record is located beyond the end of the file, the file is extended but the intervening data remains uninitialized | ||
+ | |||
+ | if the record only partially fills a disk sector, it is copied to a DOS disk buffer to be written out to disk at a later time | ||
+ | |||
+ | not supported by MS Windows 3.0 DOSX.EXE DOS extender | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=15h, | ||
+ | ===== 23h - DOS 1+ - GET FILE SIZE FOR FCB ===== | ||
+ | < | ||
+ | AH = 23h | ||
+ | DS:DX -> unopened FCB (see AH=0Fh), wildcards not allowed | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful (matching file found) | ||
+ | FCB random record field filled with size in records, rounded up | ||
+ | to next full record | ||
+ | FFh failed (no matching file found) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | not supported by MS Windows 3.0 DOSX.EXE DOS extender | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=42h | ||
+ | |||
+ | ===== 24h - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB ===== | ||
+ | < | ||
+ | AH = 24h | ||
+ | DS:DX -> opened FCB (see AH=0Fh) | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | computes the random record number corresponding to the current record number and record size, then stores the result in the FCB | ||
+ | |||
+ | normally used when switching from sequential to random access | ||
+ | |||
+ | not supported by MS Windows 3.0 DOSX.EXE DOS extender | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=21h, | ||
+ | |||
+ | ===== 25h - DOS 1+ - SET INTERRUPT VECTOR ===== | ||
+ | < | ||
+ | AH = 25h | ||
+ | AL = interrupt number | ||
+ | DS:DX -> new interrupt handler | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | this function is preferred over direct modification of the interrupt vector table | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=35h | ||
+ | |||
+ | ===== 25xxh - Phar Lap 386/ | ||
+ | |||
+ | ==== 2501h - Phar Lap 386/ | ||
+ | < | ||
+ | AX = 2501h | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear | ||
+ | </ | ||
+ | Note: Phar Lap uses INT 21/AH=25h as the entry point for all 386/ | ||
+ | system calls. Only available when directly using 386/ | ||
+ | or when using a product that was created using 386-DOS/ | ||
+ | SeeAlso: AH=30h" | ||
+ | |||
+ | ==== 2502h - Phar Lap 386/ | ||
+ | |||
+ | AX = 2502h | ||
+ | CL = interrupt number | ||
+ | Return: ES:EBX -> 48-bit address of protected-mode interrupt handler | ||
+ | CF clear | ||
+ | SeeAlso: AX=2503h, | ||
+ | ==== 2503h - Phar Lap 386/ | ||
+ | AX = 2503h | ||
+ | CL = interrupt number | ||
+ | Return: EBX = 32-bit address of real-mode interrupt handler | ||
+ | CF clear | ||
+ | SeeAlso: AX=2502h, | ||
+ | ==== 2504 - Phar Lap 386/ | ||
+ | AX = 2504h | ||
+ | CL = interrupt number | ||
+ | DS:EDX -> 48-bit address of protected-mode interrupt handler | ||
+ | Return: CF clear | ||
+ | SeeAlso: AX=2502h, | ||
+ | ==== 2505h - Phar Lap 386/ | ||
+ | AX = 2505h | ||
+ | CL = interrupt number | ||
+ | EBX = 32-bit address of real-mode interrupt handler | ||
+ | Return: CF clear | ||
+ | SeeAlso: AX=2503h, | ||
+ | ==== 2506h - Phar Lap 386/ | ||
+ | AX = 2506h | ||
+ | CL = interrupt number | ||
+ | DS:EDX -> 48-bit address of protected-mode interrupt handler | ||
+ | Return: CF clear | ||
+ | Note: This function modifies both the real-mode low-memory interrupt | ||
+ | vector table and the protected-mode Interrupt Descriptor Table (IDT) | ||
+ | Interrupts occurring in real mode are resignaled in protected mode. | ||
+ | ==== 2507h - Phar Lap 386/ | ||
+ | AX = 2507h | ||
+ | CL = interrupt number | ||
+ | DS:EDX -> 48-bit address of protected-mode interrupt handler | ||
+ | EBX = 32-bit address of real-mode interrupt handler | ||
+ | Return: CF clear | ||
+ | Note: | ||
+ | SeeAlso: AX=2504h, | ||
+ | ==== 2508h - Phar Lap 386/ | ||
+ | AX = 2508h | ||
+ | BX = segment selector | ||
+ | Return: CF clear if successful | ||
+ | ECX = linear base address of segment | ||
+ | CF set if invalid segment selector | ||
+ | ==== 2509h - Phar Lap 386/ | ||
+ | AX = 2509h | ||
+ | EBX = linear address to convert | ||
+ | Return: CF clear if successful | ||
+ | ECX = physical address (carry flag clear) | ||
+ | CF set if linear address not mapped in page tables | ||
+ | ==== 250Ah - Phar Lap 386/ | ||
+ | AX = 250Ah | ||
+ | ES = segment selector in the Local Descriptor Table (LDT) of segment | ||
+ | to modify | ||
+ | EBX = physical base address of memory to map (multiple of 4K) | ||
+ | ECX = number of physical 4K pages to map | ||
+ | Return: CF clear if successful | ||
+ | EAX = 32-bit offset in segment of mapped memory | ||
+ | CF set on error | ||
+ | EAX = error code | ||
+ | 08h insufficient memory to create page tables | ||
+ | 09h invalid segment selector | ||
+ | SeeAlso: INT 31/AX=0800h | ||
+ | ==== 250Ch - Phar Lap 386/ | ||
+ | AX = 250Ch | ||
+ | Return: CF clear | ||
+ | AL = base interrupt vector for IRQ0-IRQ7 | ||
+ | AH = base interrupt vector for IRQ8-IRQ15 | ||
+ | BL = interrupt vector for BIOS print screen function | ||
+ | SeeAlso: INT 31/AX=0400h | ||
+ | ==== 250Dh - Phar Lap 386/ | ||
+ | AX = 250Dh | ||
+ | Return: CF clear | ||
+ | EAX = 32-bit address of real-mode 386/ | ||
+ | through from real mode to a protected-mode routine | ||
+ | EBX = 32-bit real-mode address of intermode call data buffer | ||
+ | ECX = size in bytes of intermode call data buffer | ||
+ | ES:EDX -> protected-mode address of intermode call data buffer | ||
+ | ==== 250Eh - Phar Lap 386/ | ||
+ | AX = 250Eh | ||
+ | EBX = 32-bit address of real-mode procedure to call | ||
+ | ECX = number of two-byte words to copy from protected-mode stack | ||
+ | to real-mode stack | ||
+ | Return: CF clear if successful | ||
+ | all segment registers unchanged | ||
+ | all general registers contain values set by real-mode procedure | ||
+ | all other flags set as they were left by real-mode procedure | ||
+ | CF set on error | ||
+ | EAX = error code | ||
+ | 01h not enough real-mode stack space | ||
+ | SeeAlso: AH=E1h" | ||
+ | ==== 250Fh - Phar Lap 386/ | ||
+ | AX = 250Fh | ||
+ | ES:EBX -> 48-bit protected-mode address to convert | ||
+ | ECX = length of data, in bytes | ||
+ | Return: CF clear if successful | ||
+ | ECX = 32-bit MS-DOS address | ||
+ | CF set on error | ||
+ | ECX destroyed | ||
+ | SeeAlso: AX=2510h | ||
+ | ==== 2510h - Phar Lap 386/ | ||
+ | AX = 2510h | ||
+ | EBX = 32-bit address of real-mode procedure to call | ||
+ | ECX = number of two-byte words to copy to protected-mode stack to | ||
+ | real-mode stack | ||
+ | DS:EDX -> pointer to parameter block (see below) | ||
+ | Return: CF clear if successful | ||
+ | all segment registers unchanged, | ||
+ | EDX unchanged | ||
+ | all other general registers contain values set by real-mode proc | ||
+ | all other flags are set as they were left by real-mode procedure | ||
+ | real-mode register values are returned in the parameter block | ||
+ | CF set on error | ||
+ | EAX = error code | ||
+ | 01h not enough real-mode stack space | ||
+ | SeeAlso: AX=250Fh | ||
+ | |||
+ | Format of parameter block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ==== 2511h - Phar Lap 386/ | ||
+ | AX = 2511h | ||
+ | DS:EDX -> pointer to parameter block (see below) | ||
+ | Return: all segment registers unchanged | ||
+ | EDX unchanged | ||
+ | all other registers contain values set by the real-mode int handler | ||
+ | the flags are set as they were left by the real-mode interrupt handler | ||
+ | real-mode register values are returned in the parameter block | ||
+ | SeeAlso: AX=2503h, | ||
+ | |||
+ | Format of parameter block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Note: all other real-mode values set from protected-mode registers | ||
+ | ==== 2512h - Phar Lap 386/ | ||
+ | AX = 2512h | ||
+ | DS:EDX -> pointer to ASCIIZ program name | ||
+ | ES:EBX -> pointer to parameter block (see below) | ||
+ | ECX = size in bytes of LDT buffer | ||
+ | Return: CF clear if successful | ||
+ | EAX = number of segment descriptors in LDT | ||
+ | CF set on error | ||
+ | EAX = error code | ||
+ | 02h file not found or path invalid | ||
+ | 05h access denied | ||
+ | 08h insufficient memory | ||
+ | 0Ah environment invalid | ||
+ | 0Bh invalid file format | ||
+ | 80h LDT too small | ||
+ | |||
+ | Format of parameter block: | ||
+ | Offset Size Description | ||
+ | Input: | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Output: | ||
+ | | ||
+ | | ||
+ | 0000h | ||
+ | 0001h | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ==== 2513h - Phar Lap 386/ | ||
+ | AX = 2513h | ||
+ | BX = segment selector of descriptor in GDT or LDT | ||
+ | CL = access-rights byte for alias descriptor | ||
+ | CH = use-type bit (USE16 or USE32) for alias descriptor | ||
+ | Return: CF clear if successful | ||
+ | AX = segment selector for created alias | ||
+ | CF set on error | ||
+ | EAX = error code | ||
+ | 08h insufficient memory (can't grow LDT) | ||
+ | 09h invalid segment selector in BX | ||
+ | ==== 2514h - Phar Lap 386/ | ||
+ | AX = 2514h | ||
+ | BX = segment selector of descriptor in GDT or LDT | ||
+ | CL = new access-rights byte | ||
+ | CH = new use-type bit (USE16 or USE32) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | EAX = error code | ||
+ | 09h invalid selector in BX | ||
+ | SeeAlso: AX=2515h, | ||
+ | ==== 2515h - Phar Lap 386/ | ||
+ | AX = 2515h | ||
+ | BX = segment selector of descriptor in GDT or LDT | ||
+ | Return: CF clear if successful | ||
+ | CL = access-rights byte for segment | ||
+ | CH = use-type bit (USE16 or USE32) | ||
+ | ECX< | ||
+ | CF set on error | ||
+ | EAX = error code | ||
+ | 09h invalid segment selector in BX | ||
+ | SeeAlso: AX=2514h | ||
+ | ==== 2516h - Phar Lap 386/ | ||
+ | AX = 2516h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ==== 2517h - Phar Lap 386/ | ||
+ | AX = 2517h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ==== 2518h - Phar Lap 386/ | ||
+ | AX = 2518h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ==== 2519h - Phar Lap 386/ | ||
+ | AX = 2519h | ||
+ | Return: CF clear | ||
+ | EAX = error code | ||
+ | 0000h no error | ||
+ | 0001h out of physical memory | ||
+ | 0002h out of swap space (unable to grow swap file) | ||
+ | 0003h out of LDT entries and unable to grow LDT | ||
+ | 0004h unable to change extended memory allocation mark | ||
+ | FFFFFFFFh paging disabled | ||
+ | Note: VMM is the Virtual Memory Manager option | ||
+ | ==== 251Ah - Phar Lap 386/ | ||
+ | AX = 251Ah | ||
+ | EDX = number of 4k pages to lock | ||
+ | if BL = 00h | ||
+ | ECX = linear address of first page to lock | ||
+ | if BL = 01h | ||
+ | ES:ECX -> pointer to first page to lock | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | EAX = error code | ||
+ | 08h insufficient memory | ||
+ | 09h invalid address range | ||
+ | SeeAlso: AX=251Bh, | ||
+ | ==== 251Bh - Phar Lap 386/ | ||
+ | AX = 251Bh | ||
+ | EDX = number of pages to unlock | ||
+ | if BL = 00h | ||
+ | ECX = linear address of first page to unlock | ||
+ | if BL = 01h | ||
+ | ES:ECX -> pointer to first page to unlock | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | EAX = error code | ||
+ | 09h invalid address range | ||
+ | SeeAlso: AX=251Ah, | ||
+ | ==== 251Dh - Phar Lap 386/ | ||
+ | AX = 251Dh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=251Eh, | ||
+ | ==== 251Eh - Phar Lap 386/ | ||
+ | AX = 251Eh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=251Dh, | ||
+ | ==== 251Fh - Phar Lap 386/ | ||
+ | AX = 251Fh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=251Dh, | ||
+ | ==== 2520h - Phar Lap 386/ | ||
+ | AX = 2520h | ||
+ | DS:EDX -> pointer to buffer at least 100 bytes in size (see below) | ||
+ | BL = 0 (don't reset VM stats), 1 (reset VM stats) | ||
+ | Return: carry flag clear | ||
+ | |||
+ | Format of VM stats buffer: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 0001h VM subsystem is present | ||
+ | 0000h VM not present | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 54h 16 BYTEs reserved for future expansion (set to zero) | ||
+ | ==== 2521h - Phar Lap 386/ | ||
+ | AX = 2521h | ||
+ | EBX = max 4k pages of physical extended memory which program may use | ||
+ | Return: CF clear if successful | ||
+ | EBX = maximum limit in pages | ||
+ | ECX = minimum limit in pages | ||
+ | CF set on error | ||
+ | EAX = error code | ||
+ | 08h insufficient memory or -nopage switch used | ||
+ | SeeAlso: AX=2522h | ||
+ | ==== 2522h - Phar Lap 386/ | ||
+ | AX = 2522h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=2523h | ||
+ | ==== 2523h - Phar Lap 386/ | ||
+ | AX = 2523h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=2522h | ||
+ | ==== 2524h - Phar Lap 386/ | ||
+ | AX = 2524h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ==== 2525h - Phar Lap 386/ | ||
+ | AX = 2525h | ||
+ | EBX = limit in 4k pages of physical conventional memory which program | ||
+ | may use | ||
+ | Return: CF clear if successful | ||
+ | EBX = maximum limit in pages | ||
+ | ECX = minimum limit in pages | ||
+ | CF set on error | ||
+ | EAX = error code | ||
+ | 08h insufficient memory or -nopage switch used | ||
+ | SeeAlso: AX=2521h | ||
+ | ==== 2526h - Phar Lap 386/ | ||
+ | AX = 2526h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ==== 25C0h - Phar Lap 386/ | ||
+ | AX = 25C0h | ||
+ | BX = number of 16-byte paragraphs of MS-DOS memory requested | ||
+ | Return: CF clear if successful | ||
+ | AX = real-mode paragraph address of memory | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | 07h MS-DOS memory control blocks destroyed | ||
+ | 08h insufficient memory | ||
+ | BX = size in paragraphs of largest available memory block | ||
+ | SeeAlso: AX=25C1h, | ||
+ | ==== 25C1h - Phar Lap 386/ | ||
+ | AX = 25C1h | ||
+ | CX = real-mode paragraph address of memory block to free | ||
+ | Return: CF clear if successful | ||
+ | EAX destroyed | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | 07h MS-DOS memory control blocks destroyed | ||
+ | 09h invalid memory block address in CX | ||
+ | SeeAlso: AX=25C0h, | ||
+ | ==== 25C2h - Phar Lap 386/ | ||
+ | AX = 25C2h | ||
+ | BX = new requested block size in paragraphs | ||
+ | CX = real-mode paragraph address of memory block to modify | ||
+ | Return: CF clear if successful | ||
+ | EAX destroyed | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | 07h MS-DOS memory control blocks destroyed | ||
+ | 08h insufficient memory | ||
+ | 09h invalid memory block address in CX | ||
+ | BX = size in paragraphs of largest available memory block | ||
+ | SeeAlso: AX=25C0h, | ||
+ | ==== 25C3h - Phar Lap 386/ | ||
+ | AX = 25C3h | ||
+ | ES:EBX -> pointer to parameter block (see below) | ||
+ | DS:EDX -> pointer to ASCIIZ program filename | ||
+ | Return: CF clear if successful | ||
+ | all registers unchanged | ||
+ | CF set on error | ||
+ | EAX = error code | ||
+ | 01h function code in AL is invalid ??? | ||
+ | 02h file not found or path invalid | ||
+ | 05h access denied | ||
+ | 08h insufficient memory to load program | ||
+ | 0Ah environment invalid | ||
+ | 0Bh invalid file format | ||
+ | |||
+ | Format of parameter block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ===== 26h - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX ===== | ||
+ | < | ||
+ | AH = 26h | ||
+ | DX = segment at which to create PSP (see below for format) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | new PSP is updated with memory size information; | ||
+ | |||
+ | (DOS 2+) DOS assumes that the caller' | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=4Bh, | ||
+ | |||
+ | == Format of PSP: == | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h|2 BYTEs |INT 20 instruction for CP/M CALL 0 program termination| | ||
+ | |02h|WORD |segment of first byte beyond memory allocated to program| | ||
+ | |04h|BYTE |unused filler| | ||
+ | |05h|BYTE |CP/ | ||
+ | |06h|WORD |CP/ | ||
+ | |08h|2 BYTEs |remainder of FAR JMP at 05h| | ||
+ | |0Ah|DWORD |stored INT 22 termination address| | ||
+ | |0Eh|DWORD |stored INT 23 control-Break handler address| | ||
+ | |12h|DWORD |DOS 1.1+ stored INT 24 critical error handler address| | ||
+ | |16h|WORD |segment of parent PSP| | ||
+ | |18h|20 BYTEs |DOS 2+ Job File Table, one byte per file handle, FFh = closed| | ||
+ | |2Ch|WORD |DOS 2+ segment of environment for process| | ||
+ | |2Eh|DWORD |DOS 2+ process' | ||
+ | |32h|WORD |DOS 3+ number of entries in JFT (default 20)| | ||
+ | |34h|DWORD |DOS 3+ pointer to JFT (default PSP:0018h)| | ||
+ | |38h|DWORD |DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)\\ used by SHARE in DOS 3.3| | ||
+ | |3Ch |4 BYTEs |unused by DOS versions <= 5.00| | ||
+ | |40h |2 BYTEs |DOS 5.0 version to return on INT 21/AH=30h| | ||
+ | |42h |6 BYTEs |unused by DOS versions <= 5.00| | ||
+ | |48h|BYTE |(MSWindows3) bit 0 set if non-Windows application| | ||
+ | |49h |7 BYTEs |unused by DOS versions <= 5.00| | ||
+ | |50h |3 BYTEs |DOS 2+ service request (INT 21/RETF instructions)| | ||
+ | |53h |9 BYTEs |unused in DOS versions <= 5.00| | ||
+ | |5Ch |16 BYTEs |first default FCB, filled in from first commandline argument overwrites second FCB if opened| | ||
+ | |6Ch |16 BYTEs |second default FCB, filled in from second commandline argument overwrites beginning of commandline if opened| | ||
+ | |7Ch |4 BYTEs |unused| | ||
+ | |80h |128 BYTEs |commandline / default DTA\\ command tail is BYTE for length of tail, N BYTEs for the tail, followed by a BYTE containing 0Dh| | ||
+ | |||
+ | <WRAP round box> | ||
+ | in DOS versions 3.0 and up, the limit on simultaneously open files may be increased by allocating memory for a new open file table, filling it with FFh, copying the first 20 bytes from the default table, and adjusting the pointer and count at 34h and 32h. However, DOS versions through | ||
+ | |||
+ | network redirectors based on the original MS-Net implementation use values of 80h-FEh in the open file table to indicate remote files | ||
+ | |||
+ | MSDOS 5.00 incorrectly fills the FCB fields when loading a program high; the first FCB is empty and the second contains the first parameter | ||
+ | </ | ||
+ | |||
+ | == Format of environment block: == | ||
+ | ^ Offset | ||
+ | | 00h | N BYTEs | first environment variable, ASCIZ string of form " | ||
+ | | | N BYTEs | second environment variable, ASCIZ string | ||
+ | | ... ||| | ||
+ | | | N BYTEs | last environment variable, ASCIZ string of form " | ||
+ | | | BYTE | 00h | | ||
+ | | ---DOS 3+--- ||| | ||
+ | | | WORD | number of strings following environment (normally 1) | | ||
+ | | | N BYTEs | ASCIZ full pathname of program owning this environment | ||
+ | | | ||
+ | |||
+ | ===== 27h - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE ===== | ||
+ | < | ||
+ | AH = 27h | ||
+ | CX = number of records to read | ||
+ | DS:DX -> opened FCB (see AH=0Fh) | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful, all records read | ||
+ | 01h end of file, no data read | ||
+ | 02h segment wrap in DTA, no data read | ||
+ | 03h end of file, partial read | ||
+ | [DTA] = records read from file | ||
+ | CX = number of records read (return AL = 00h or 03h) | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | read begins at current file position as specified in FCB; the file position is updated after reading | ||
+ | |||
+ | not supported by MS Windows 3.0 DOSX.EXE DOS extender | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=21h, | ||
+ | |||
+ | ===== 28h - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE ===== | ||
+ | < | ||
+ | AH = 28h | ||
+ | CX = number of records to write | ||
+ | DS:DX -> opened FCB (see AH=0Fh) | ||
+ | [DTA] = records to write | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | 01h disk full or file read-only | ||
+ | 02h segment wrap in DTA | ||
+ | CX = number of records written | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | write begins at current file position as specified in FCB; the file position is updated after writing | ||
+ | |||
+ | if CX = 0000h on entry, no data is written; instead the file size is adjusted to be the same as the file position specified by the random record and record size fields of the FCB | ||
+ | |||
+ | if the data to be written is less than a disk sector, it is copied into a DOS disk buffer, to be written out to disk at a later time | ||
+ | |||
+ | not supported by MS Windows 3.0 DOSX.EXE DOS extender | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=22h, | ||
+ | |||
+ | ===== 29h - DOS 1+ - PARSE FILENAME INTO FCB ===== | ||
+ | < | ||
+ | AH = 29h | ||
+ | AL = parsing options | ||
+ | bit 0: skip leading separators | ||
+ | bit 1: use existing drive number in FCB if no drive is specified, | ||
+ | | ||
+ | bit 2: use existing filename in FCB if no base name is specified, | ||
+ | | ||
+ | bit 3: use existing extension in FCB if no extension is specified, | ||
+ | | ||
+ | bits 4-7: reserved (0) | ||
+ | DS:SI -> filename string (both ' | ||
+ | ES:DI -> buffer for unopened FCB | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = result code | ||
+ | 00h successful parse, no wildcards encountered | ||
+ | 01h successful parse, wildcards present | ||
+ | FFh failed (invalid drive specifier) | ||
+ | DS:SI -> first unparsed character | ||
+ | ES:DI buffer filled with unopened FCB (see AH=0Fh) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | asterisks expanded to question marks in the FCB | ||
+ | |||
+ | all processing stops when a filename terminator is encountered | ||
+ | |||
+ | cannot be used with filespecs which include a path (DOS 2+) | ||
+ | </ | ||
+ | SeeAlso: AH=0Fh, | ||
+ | |||
+ | ===== 2Ah - DOS 1+ - GET SYSTEM DATE ===== | ||
+ | < | ||
+ | AH = 2Ah | ||
+ | </ | ||
+ | < | ||
+ | Return: CX = year (1980-2099) | ||
+ | DH = month | ||
+ | DL = day | ||
+ | ---DOS 1.10+--- | ||
+ | AL = day of week (00h=Sunday) | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=2Bh" | ||
+ | |||
+ | ===== 2Bh ===== | ||
+ | |||
+ | ==== 2Bh - DOS 1+ - SET SYSTEM DATE ==== | ||
+ | < | ||
+ | AH = 2Bh | ||
+ | CX = year (1980-2099) | ||
+ | DH = month | ||
+ | DL = day | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | FFh invalid date, system date unchanged | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | DOS 3.3+ also sets CMOS clock | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=2Ah, | ||
+ | ==== 2Bh - AI Architects - ??? - INSTALLATION CHECK ==== | ||
+ | < | ||
+ | AH = 2Bh | ||
+ | CX = 4149h (' | ||
+ | DX = 413Fh (' | ||
+ | </ | ||
+ | < | ||
+ | Return: AL <> FFh if installed | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | Borland' | ||
+ | </ | ||
+ | |||
+ | ==== 2Bh - PC Tools v5.x PC-Cache - INSTALLATION CHECK ==== | ||
+ | < | ||
+ | AH = 2Bh | ||
+ | CX = 4358h (' | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = FFh if PC-Cache not installed | ||
+ | AL = 00h if installed | ||
+ | CX = 6378h (' | ||
+ | BX = ??? | ||
+ | DX = ??? | ||
+ | </ | ||
+ | |||
+ | SeeAlso: INT 16/ | ||
+ | ==== 2Bh - DESQview - INSTALLATION CHECK ==== | ||
+ | < | ||
+ | AH = 2Bh | ||
+ | CX = 4445h (' | ||
+ | DX = 5351h (' | ||
+ | AL = subfunction (DV v2.00+) | ||
+ | 01h get version | ||
+ | Return: BX = version (BH = major, BL = minor) | ||
+ | Note: early copies of v2.00 return 0002h | ||
+ | 02h get shadow buffer info, and start shadowing | ||
+ | Return: BH = rows in shadow buffer | ||
+ | BL = columns in shadow buffer | ||
+ | DX = segment of shadow buffer | ||
+ | 04h get shadow buffer info | ||
+ | Return: BH = rows in shadow buffer | ||
+ | BL = columns in shadow buffer | ||
+ | DX = segment of shadow buffer | ||
+ | 05h stop shadowing | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = FFh if DESQview not installed | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | in DESQview v1.x, there were no subfunctions; | ||
+ | </ | ||
+ | |||
+ | SeeAlso: INT 10/ | ||
+ | |||
+ | ==== 2Bh - ELRES v1.1 - INSTALLATION CHECK ==== | ||
+ | < | ||
+ | AH = 2Bh | ||
+ | CX = 454Ch (' | ||
+ | DX = 5253h (' | ||
+ | </ | ||
+ | < | ||
+ | Return: ES:BX -> ELRES history structure (see below) | ||
+ | DX = DABEh (signature, DAve BEnnett) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett which stores recent errorlevel values, allows them to be retrieved for use in batch files, and can place them in an environment variable | ||
+ | </ | ||
+ | SeeAlso: AH=4Bh" | ||
+ | |||
+ | == Format of ELRES history structure: == | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h|WORD|number of return codes which can be stored by following buffer| | ||
+ | |02h|WORD|current position in buffer (treated as a ring)| | ||
+ | |04h|N BYTEs|ELRES buffer| | ||
+ | |||
+ | ==== 2Bh - TAME v2.10+ - INSTALLATION CHECK ==== | ||
+ | < | ||
+ | AX = 2B01h | ||
+ | CX = 5441h (' | ||
+ | DX = 4D45h (' | ||
+ | ---v2.60--- | ||
+ | BH = ??? | ||
+ | 00h skip ???, else do | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = 02h if installed | ||
+ | ES:DX -> data area in TAME-RES (see below) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | TAME is a shareware program by David G. Thomas which gives up CPU time to other partitions under a multitasker when the current partition' | ||
+ | </ | ||
+ | |||
+ | == Format of TAME 2.10-2.20 data area: == | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | | 00h |BYTE |data structure minor version number (01h in TAME 2.20)| | ||
+ | | 01h |BYTE |data structure major version number (07h in TAME 2.20)| | ||
+ | | 02h |DWORD |number of task switches| | ||
+ | | 06h |DWORD |number of keyboard polls| | ||
+ | | 0Ah |DWORD |number of time polls| | ||
+ | | 0Eh |DWORD |number of times DESQview told program runs only in foreground| | ||
+ | | 12h |DWORD |original INT 10h| | ||
+ | | 16h |DWORD |original INT 14h| | ||
+ | | 1Ah |DWORD |original INT 15h| | ||
+ | | 1Eh |DWORD |original INT 16h| | ||
+ | | 22h |DWORD |original INT 17h| | ||
+ | | 26h |DWORD |original INT 21h| | ||
+ | | 2Ah |DWORD |original INT 28h| | ||
+ | | 2Eh |WORD |offset of TAME INT 10h handler| | ||
+ | | 30h |WORD |offset of TAME INT 14h handler| | ||
+ | | 32h |WORD |offset of TAME INT 15h handler| | ||
+ | | 34h |WORD |offset of TAME INT 16h handler| | ||
+ | | 36h |WORD |offset of TAME INT 17h handler| | ||
+ | | 38h |WORD |offset of TAME INT 21h handler| | ||
+ | | 3Ah |WORD |offset of TAME INT 28h handler| | ||
+ | | 3Ch |WORD |X in /max:X,Y or /freq:X,Y| | ||
+ | | 3Eh |WORD |Y in /max:X,Y or /freq:X,Y| | ||
+ | | 40h |WORD |number of polls remaining before next task switch| | ||
+ | | 42h |WORD |/ | ||
+ | | 44h |BYTE |flags for interrupts already grabbed by TAME\\ bit 0: INT 10h\\ bit 1: INT 14h\\ bit 2: INT 15h\\ bit 3: INT 16h\\ bit 4: INT 17h\\ bit 5: INT 21h\\ bit 6: INT 28h| | ||
+ | | 45h |BYTE |flags for interrupts which may be acted on (same bits as above)| | ||
+ | | 46h |BYTE |TAME enabled (01h) or disabled (00h)| | ||
+ | | 47h |BYTE |/ | ||
+ | | 48h |BYTE |/ | ||
+ | | 49h |BYTE |window or task number for this task| | ||
+ | | 4Ah |BYTE |multitasker type ???\\ 01h DESQview\\ 02h DoubleDOS\\ 03h TopView\\ ???| | ||
+ | | 4Bh |BYTE |type of task switching selected\\ bit 0: DESQview??? | ||
+ | | 4Ch |BYTE |??? | ||
+ | | 4Dh |BYTE |flags\\ bit 1: /FREQ instead of /MAX| | ||
+ | | 4Eh |BYTE |/ | ||
+ | | 4Fh |BYTE |task switches left until next FGONLY DESQview API call| | ||
+ | | 50h |BYTE |??? | ||
+ | |||
+ | == Format of TAME 2.30 data area: == | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | | 00h |BYTE |data structure minor version number (02h in TAME 2.30)| | ||
+ | | 01h |BYTE |data structure major version number (0Ah in TAME 2.30)| | ||
+ | | 02h |DWORD |number of task switches| | ||
+ | | 06h |DWORD |number of keyboard polls| | ||
+ | | 0Ah |DWORD |number of time polls| | ||
+ | | 0Eh |DWORD |number of times DESQview told program runs only in foreground| | ||
+ | | 12h |DWORD |time of last /CLEAR or TAME-RES load| | ||
+ | | 16h |DWORD |time yielded| | ||
+ | | 1Ah |DWORD |time spent polling| | ||
+ | | 1Eh |DWORD |time spent waiting on key input with INT 16/ | ||
+ | | 22h |DWORD |original INT 10h| | ||
+ | | 26h |DWORD |original INT 14h| | ||
+ | | 2Ah |DWORD |original INT 15h| | ||
+ | | 2Eh |DWORD |original INT 16h| | ||
+ | | 32h |DWORD |original INT 17h| | ||
+ | | 36h |DWORD |original INT 21h| | ||
+ | | 3Ah |DWORD |original INT 28h| | ||
+ | | 3Eh |WORD |offset of TAME INT 10h handler| | ||
+ | | 40h |WORD |offset of TAME INT 14h handler| | ||
+ | | 42h |WORD |offset of TAME INT 15h handler| | ||
+ | | 44h |WORD |offset of TAME INT 16h handler| | ||
+ | | 46h |WORD |offset of TAME INT 17h handler| | ||
+ | | 48h |WORD |offset of TAME INT 21h handler| | ||
+ | | 4Ah |WORD |offset of TAME INT 28h handler| | ||
+ | | 4Ch |WORD |X in /max:X,Y or /freq:X,Y| | ||
+ | | 4Eh |WORD |Y in /max:X,Y or /freq:X,Y| | ||
+ | | 50h |WORD |number of polls remaining before next task switch| | ||
+ | | 52h |WORD |/ | ||
+ | | 54h |WORD |/ | ||
+ | | 56h |WORD |task switches left until next FGONLY DESQview API call| | ||
+ | | 58h |WORD |multitasker version| | ||
+ | | 5Ah |WORD |virtual screen segment| | ||
+ | | 5Ch |BYTE |flags for interrupts already grabbed by TAME\\ bit 0: INT 10h\\ bit 1: INT 14h\\ bit 2: INT 15h\\ bit 3: INT 16h\\ bit 4: INT 17h\\ bit 5: INT 21h\\ bit 6: INT 28h| | ||
+ | | 5Dh |BYTE |flags for interrupts which may be acted on (same bits as above)| | ||
+ | | 5Eh |BYTE |window or task number for this task| | ||
+ | | 5Fh |BYTE |multitasker type\\ 01h DESQview\\ 02h DoubleDOS\\ 03h TopView\\ 04h OmniView\\ 05h VM/386| | ||
+ | | 60h |BYTE |type of task switching selected (bit flags)\\ bit 0: DESQview\\ bit 1: DoubleDOS\\ bit 2: TopView\\ bit 3: OmniView\\ bit 4: KeySwitch\\ bit 5: HLT instruction| | ||
+ | | 61h |BYTE |watch_DOS| | ||
+ | | 62h |BYTE |bit flags\\ bit 0: TAME enabled\\ bit 1: /FREQ instead of /MAX (counts in 3Ch and 3Eh per tick)\\ bit 2: /TIMEPOLL\\ bit 3: /KEYPOLL\\ bit 4: inhibit timer\\ bit 5: enable status monitoring| | ||
+ | | 63h |BYTE |old status| | ||
+ | | 64h |WORD |signature DA34h| | ||
+ | |||
+ | == Format of TAME 2.60 data area: == | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | | 00h|BYTE|data structure minor version number (02h in TAME 2.60)| | ||
+ | | 01h|BYTE|data structure major version number (0Bh in TAME 2.60)| | ||
+ | | 02h|DWORD|number of task switches| | ||
+ | | 06h|DWORD|number of keyboard polls| | ||
+ | | 0Ah|DWORD|number of time polls| | ||
+ | | 0Eh|DWORD|number of times DESQview told program runs only in foreground| | ||
+ | | 12h|DWORD|time of last /CLEAR or TAME-RES load| | ||
+ | | 16h|DWORD|time yielded| | ||
+ | | 1Ah|DWORD|time spent polling| | ||
+ | | 1Eh|DWORD|time spent waiting on key input with INT 16/ | ||
+ | | 22h|4 BYTEs|???| | ||
+ | | 26h|DWORD|original INT 10h| | ||
+ | | 2Ah|DWORD|original INT 14h| | ||
+ | | 2Eh|DWORD|original INT 15h| | ||
+ | | 32h|DWORD|original INT 16h| | ||
+ | | 36h|DWORD|original INT 17h| | ||
+ | | 3Ah|DWORD|original INT 21h| | ||
+ | | 3Eh|DWORD|original INT 28h| | ||
+ | | 42h|WORD|offset of TAME INT 10h handler| | ||
+ | | 44h|WORD|offset of TAME INT 14h handler| | ||
+ | | 46h|WORD|offset of TAME INT 15h handler| | ||
+ | | 48h|WORD|offset of TAME INT 16h handler| | ||
+ | | 4Ah|WORD|offset of TAME INT 17h handler| | ||
+ | | 4Ch|WORD|offset of TAME INT 21h handler| | ||
+ | | 4Eh|WORD|offset of TAME INT 28h handler| | ||
+ | | 50h|WORD|X in /max:X,Y or /freq:X,Y| | ||
+ | | 52h|WORD|Y in /max:X,Y or /freq:X,Y| | ||
+ | | 54h|WORD|number of polls remaining before next task switch| | ||
+ | | 56h|WORD|/ | ||
+ | | 58h|4 BYTEs|???| | ||
+ | | 5Ch|WORD|X in /boost:X,Y| | ||
+ | | 5Eh|WORD|Y in /boost:X,Y| | ||
+ | | 60h|WORD|/ | ||
+ | | 62h|WORD|task switches left until next FGONLY DESQview API call| | ||
+ | | 64h|WORD|multitasker version ???| | ||
+ | | 66h|WORD|virtual screen segment| | ||
+ | | 68h|BYTE|flags for interrupts already grabbed by TAME\\ bit 0: INT 10h\\ bit 1: INT 14h\\ bit 2: INT 15h\\ bit 3: INT 16h\\ bit 4: INT 17h\\ bit 5: INT 21h\\ bit 6: INT 28h| | ||
+ | | 69h|BYTE|flags for interrupts which may be acted on (same bits as above)| | ||
+ | | 6Ah|BYTE|window or task number for this task| | ||
+ | | 6Bh|BYTE|multitasker type\\ 01h DESQview\\ 02h DoubleDOS\\ 03h TopView\\ 04h OmniView\\ 05h VM/386| | ||
+ | | 6Ch|BYTE|type of task switching selected (bit flags)\\ bit 0: DESQview\\ bit 1: DoubleDOS\\ bit 2: TopView\\ bit 3: OmniView\\ bit 4: KeySwitch\\ bit 5: HLT instruction| | ||
+ | | 6Dh|BYTE|watch_DOS| | ||
+ | | 6Eh|BYTE|bit flags\\ bit 0: TAME enabled\\ bit 1: /FREQ instead of /MAX (counts in 50h and 52h per tick)\\ bit 2: /TIMEPOLL\\ bit 3: /KEYPOLL\\ bit 4: inhibit timer\\ bit 5: enable status monitoring| | ||
+ | | 6Fh|BYTE|old status| | ||
+ | | 70h|WORD|signature DA34h\ | ||
+ | |||
+ | |||
+ | ==== 2Bh - pcANYWHERE IV/LAN - INSTALLATION CHECK ==== | ||
+ | < | ||
+ | AX = 2B44h (' | ||
+ | BX = 4D41h (' | ||
+ | CX = 7063h (' | ||
+ | DX = 4157h (' | ||
+ | </ | ||
+ | < | ||
+ | Return: AX = 4F4Bh (' | ||
+ | = 6F6Bh (' | ||
+ | CX:DX -> API entry point | ||
+ | </ | ||
+ | |||
+ | SeeAlso: INT 16/AH=79h | ||
+ | < | ||
+ | Call API entry point with: | ||
+ | AX = 0000h get pcANYWHERE IV version | ||
+ | DS:SI -> BYTE buffer for host type code | ||
+ | Return: AH = version number | ||
+ | AL = revision number | ||
+ | DS:DI buffer byte filled with | ||
+ | 00h full-featured host | ||
+ | 01h limited-feature LAN host | ||
+ | other API may not be supported | ||
+ | AX = 0001h initialize operation | ||
+ | DS:SI -> initialization request structure (see below) | ||
+ | Return: AX = function status (see below) | ||
+ | AX = 0002h get status | ||
+ | Return: AH = current operating mode (see init req structure below) | ||
+ | AL = current connection status | ||
+ | bit 0: a physical connection is active | ||
+ | bit 1: remove screen updating is active | ||
+ | bit 2: connection checking is active | ||
+ | bit 3: hot key detection is active | ||
+ | bit 4: background file transfer is active | ||
+ | AX = 0003h suspend remote screen updates | ||
+ | Return: AX = function status (see below) | ||
+ | AX = 0004h resume screen updates | ||
+ | Return: AX = function status (see below) | ||
+ | AX = 0005h end current remote access session | ||
+ | DS:SI -> termination request structure (see below) | ||
+ | Return: AX = function status (see below) | ||
+ | AX = 0006h remove pcANYWHERE IV from memory | ||
+ | Return: AX = status | ||
+ | 0000h successful | ||
+ | FFD2h unable to release allocated memory | ||
+ | FFD1h unable to release interrupt vectors | ||
+ | AX = 8000h read data from communications channel | ||
+ | DS:BX -> buffer | ||
+ | CX = buffer size | ||
+ | Return: AX >= number of characters read/ | ||
+ | AX < 0 on error | ||
+ | AX = 8001h write data to communications channel | ||
+ | DS:BX -> buffer | ||
+ | CX = buffer size | ||
+ | Return: AX >= number of characters written | ||
+ | AX < 0 on error | ||
+ | AX = 8002h get connection status | ||
+ | Return: AX = status | ||
+ | > 0000h if connection active | ||
+ | = 0000h if connection lost | ||
+ | < 0000h on error | ||
+ | </ | ||
+ | |||
+ | == Format of initialization request structure: == | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h|BYTE|operating mode: \\ 00h wait for a call\\ 01h hot key activates\\ 02h incoming call activates\\ 03h initiate a call| | ||
+ | |01h|3 BYTEs|user ID to append to config file names| | ||
+ | |04h|WORD|DS-relative pointer to path for config files| | ||
+ | |06h|WORD|DS-relative pointer to path for program files| | ||
+ | |||
+ | == Format of termination request structure: == | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h|BYTE| operating mode after termination: | ||
+ | |||
+ | == Values for function status: == | ||
+ | | 0000h |function completed successfully| | ||
+ | | FFF2h |unable to establish a connection when operating mode is " | ||
+ | | FFF3h |modem configuration is invalid (corrupt config)| | ||
+ | | FFF4h |modem initialization failed (no modem response)| | ||
+ | | FFF5h |the communications device could not be initialized| | ||
+ | | FFF6h |the host operator aborted the function| | ||
+ | | FFF7h |the communications driver type specified in the configuration file is different than the one loaded when pcANYWHERE IV was initially started| | ||
+ | | FFF9h |the configuration file is invalid| | ||
+ | | FFFAh |the configuration file could not be found| | ||
+ | | FFFBh |no session is active| | ||
+ | | FFFCh |a remote access session is active| | ||
+ | | FFFDh |the specified operating mode is invalid| | ||
+ | |||
+ | |||
+ | |||
+ | ===== 2Ch - DOS 1+ - GET SYSTEM TIME ===== | ||
+ | < | ||
+ | AH = 2Ch | ||
+ | </ | ||
+ | < | ||
+ | Return: CH = hour | ||
+ | CL = minute | ||
+ | DH = second | ||
+ | DL = 1/100 seconds | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | on most systems, the resolution of the system clock is about 5/100sec, so returned times generally do not increment by 1 | ||
+ | |||
+ | on some systems, DL may always return 00h | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=2Ah, | ||
+ | SeeAlso: INT 2F/AX=120Dh | ||
+ | |||
+ | ===== 2Dh - DOS 1+ - SET SYSTEM TIME ===== | ||
+ | < | ||
+ | AH = 2Dh | ||
+ | CH = hour | ||
+ | CL = minute | ||
+ | DH = second | ||
+ | DL = 1/100 seconds | ||
+ | </ | ||
+ | Return: AL = result | ||
+ | 00h successful | ||
+ | FFh invalid time, system time unchanged | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | DOS 3.3+ also sets CMOS clock | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=2Bh" | ||
+ | ===== 2Eh - DOS 1+ - SET VERIFY FLAG ===== | ||
+ | < | ||
+ | AH = 2Eh | ||
+ | DL = 00h (DOS 1.x/2.x only) | ||
+ | AL = new state of verify flag | ||
+ | 00h off | ||
+ | 01h on | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | default state at system boot is OFF | ||
+ | |||
+ | when ON, all disk writes are verified provided the device driver supports read-after-write verification | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=54h | ||
+ | ==== 2Fh - DOS 2+ - GET DISK TRANSFER AREA ADDRESS ==== | ||
+ | < | ||
+ | AH = 2Fh | ||
+ | </ | ||
+ | < | ||
+ | Return: ES:BX -> current DTA | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=1Ah | ||
+ | |||
+ | ===== 30h - DOS 2+ - GET DOS VERSION ===== | ||
+ | < | ||
+ | AH = 30h | ||
+ | ---DOS 5.0--- | ||
+ | AL = what to return in BH | ||
+ | 00h OEM number (as for DOS 2.0-4.0x) | ||
+ | 01h version flag | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = major version number (00h if DOS 1.x) | ||
+ | AH = minor version number | ||
+ | BL:CX = 24-bit user serial number (most versions do not use this) | ||
+ | ---if DOS <5 or AL=00h--- | ||
+ | BH = OEM number | ||
+ | 00h IBM | ||
+ | 05h Zenith | ||
+ | 16h DEC | ||
+ | 23h Olivetti | ||
+ | 29h Toshiba | ||
+ | 4Dh Hewlett-Packard | ||
+ | 99h STARLITE architecture (OEM DOS, NETWORK DOS, SMP DOS) | ||
+ | FFh Microsoft, Phoenix | ||
+ | ---if DOS 5.0 and AL=01h--- | ||
+ | BH = version flag | ||
+ | 08h DOS is in ROM | ||
+ | 10h DOS is in HMA | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | the OS/2 v1.x Compatibility Box returns major version 0Ah | ||
+ | |||
+ | the OS/2 v2.x Compatibility Box returns major version 14h | ||
+ | |||
+ | DOS 4.01 and 4.02 identify themselves as version 4.00 | ||
+ | |||
+ | generic MSDOS 3.30, Compaq MSDOS 3.31, and others identify themselves as PC-DOS by returning OEM number 00h | ||
+ | |||
+ | the version returned under DOS 4.0x may be modified by entries in the special program list (see AH=52h) | ||
+ | |||
+ | the version returned under DOS 5.0 may be modified by SETVER; use AX=3306h to get the true version number | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=3306h, | ||
+ | |||
+ | ===== 30h - Phar Lap 386/ | ||
+ | |||
+ | AH = 30h | ||
+ | EAX = 00003000h | ||
+ | EBX = 50484152h (" | ||
+ | Return: AL = major DOS version | ||
+ | AH = minor DOS version | ||
+ | EAX bits 31-16 = 4458h (' | ||
+ | BL = ASCII major version number | ||
+ | EAX bits 31-16 = 4243h (' | ||
+ | EDX = address of GDA | ||
+ | SeeAlso: AX=2501h, | ||
+ | |||
+ | ===== 30h - VIRUS - " | ||
+ | |||
+ | AH = 30h | ||
+ | DX = ABCDh | ||
+ | Return: DX = DCBAh if installed | ||
+ | SeeAlso: AX=0D20h, | ||
+ | |||
+ | |||
+ | ===== 3000h Btrieve Multi-User - INSTALLATION CHECK ===== | ||
+ | < | ||
+ | AX = 3000h | ||
+ | </ | ||
+ | < | ||
+ | Return: AL >= 03h if INT 2F handler installed | ||
+ | </ | ||
+ | |||
+ | SeeAlso: INT 2F/ | ||
+ | |||
+ | ===== 3000h - CTask 2.0+ - INSTALLATION CHECK ===== | ||
+ | < | ||
+ | AX = 3000h | ||
+ | BX = 1234h | ||
+ | DS:DX -> 8-byte version string (DX < FFF0h) " | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = DOS major version | ||
+ | AH = DOS minor version | ||
+ | CX:BX -> Ctask global data block | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | if first eight bytes of returned data block equal eight bytes passed in, CTask is resident | ||
+ | |||
+ | CTask is a multitasking kernel for C written by Thomas Wagner | ||
+ | </ | ||
+ | |||
+ | ===== 30F1h - VIRUS - " | ||
+ | < | ||
+ | AX = 30F1h | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = 00h if resident | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=30h/ | ||
+ | |||
+ | ===== 31h - DOS 2+ - TERMINATE AND STAY RESIDENT ===== | ||
+ | < | ||
+ | AH = 31h | ||
+ | AL = return code | ||
+ | DX = number of paragraphs to keep resident | ||
+ | </ | ||
+ | < | ||
+ | Return: never | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | the value in DX only affects the memory block containing the PSP; additional memory allocated via AH=48h is not affected | ||
+ | |||
+ | the minimum number of paragraphs which will remain resident is 11h for DOS 2.x and 06h for DOS 3+ | ||
+ | |||
+ | most TSRs can save some memory by releasing their environment block before terminating (see AH=26h, | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=00h, | ||
+ | |||
+ | ===== 32h - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE ===== | ||
+ | < | ||
+ | AH = 32h | ||
+ | DL = drive number (00h = default, 01h = A:, etc) | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | DS:BX -> Drive Parameter Block (DPB) for specified drive | ||
+ | |||
+ | FFh invalid or network drive | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | the OS/2 compatibility box supports the DOS 3.3 version of this call except for the DWORD at offset 12h | ||
+ | |||
+ | this call updates the DPB by reading the disk; the DPB may be accessed via the DOS list of lists (see AH=52h) if disk access is not desirable. | ||
+ | |||
+ | documented for DOS 5.0, but undocumented in prior versions | ||
+ | </ | ||
+ | SeeAlso: AH=1Fh, | ||
+ | |||
+ | == Format of DOS Drive Parameter Block: == | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ---DOS 2.x--- | ||
+ | | ||
+ | FFFFh = unknown | ||
+ | 1Eh 64 BYTEs ASCIZ pathname of current directory for drive | ||
+ | ---DOS 3.x--- | ||
+ | | ||
+ | | ||
+ | ---DOS 4.0-5.0--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ===== 33h - DOS 2+ - EXTENDED BREAK CHECKING ===== | ||
+ | < | ||
+ | AH = 33h | ||
+ | AL = subfunction | ||
+ | 00h get current extended break state | ||
+ | Return: DL = current state, 00h = off, 01h = on | ||
+ | 01h set state of extended ^C/^Break checking | ||
+ | DL = 00h off, check only on character I/O functions | ||
+ | 01h on, check on all DOS functions | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | under DOS 3.1+, this function does not use any of the DOS-internal and may thus be called at any time | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=3302h | ||
+ | |||
+ | ===== 33xxh ===== | ||
+ | |||
+ | ==== 3302h - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE ==== | ||
+ | < | ||
+ | AX = 3302h | ||
+ | DL = new state | ||
+ | 00h for OFF or 01h for ON | ||
+ | </ | ||
+ | < | ||
+ | Return: DL = old state of extended BREAK checking | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | this function does not use any of the DOS-internal stacks and may thus be called at any time | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=33h | ||
+ | |||
+ | ==== 3305h - DOS 4+ - GET BOOT DRIVE ==== | ||
+ | < | ||
+ | AX = 3305h | ||
+ | </ | ||
+ | < | ||
+ | Return: DL = boot drive (1=A:,...) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | fully reentrant | ||
+ | |||
+ | NEC 9800-series PCs always call the boot drive A: and assign the other drive letters sequentially to the other drives in the system | ||
+ | </ | ||
+ | |||
+ | ==== 3306h - DOS 5.0 - GET TRUE VERSION NUMBER ==== | ||
+ | < | ||
+ | AX = 3306h | ||
+ | </ | ||
+ | < | ||
+ | Return: BL = major version | ||
+ | BH = minor version | ||
+ | DL = revision (bits 2-0, all others 0) | ||
+ | DH = version flags | ||
+ | bit 3: DOS is in ROM | ||
+ | bit 4: DOS in in HMA | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | Notes: this function always returns the true version number, unlike AH=30h, whose return value may be changed with SETVER | ||
+ | |||
+ | because of the conflict from the CBIS PowerLAN redirector (see next entry), programs should check whether BH is less than 100 (64h) and BL is at least 5 before accepting the returned BX as the true version number; however, even this is not entirely reliable when that redirector is loaded | ||
+ | |||
+ | fully reentrant | ||
+ | </ | ||
+ | <WRAP round important> | ||
+ | DR-DOS 5.0 returns CF set/ | ||
+ | </ | ||
+ | SeeAlso: AH=30h | ||
+ | |||
+ | ==== 3306h - CBIS POWERLAN - NETWORK REDIRECTOR - ??? ==== | ||
+ | < | ||
+ | AX = 3306h | ||
+ | </ | ||
+ | < | ||
+ | Return: AX = 3306h | ||
+ | BL = ??? (usually 00h) | ||
+ | BH = ??? (usually 00h or FFh) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | unknown function, is in conflict with DOS 5.0 version call | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=3306h" | ||
+ | |||
+ | ==== 330Fh - VIRUS - " | ||
+ | < | ||
+ | AX = 330Fh | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = 0Fh if resident (DOS returns AL=FFh) | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=30F1h, | ||
+ | |||
+ | ==== 33E0h - VIRUS - " | ||
+ | < | ||
+ | AX = 33E0h | ||
+ | </ | ||
+ | < | ||
+ | Return: AL = E0h if resident (DOS returns AL=FFh) | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=330Fh, | ||
+ | ===== 34h - DOS 2+ - GET ADDRESS OF INDOS FLAG ===== | ||
+ | |||
+ | < | ||
+ | AH = 34h | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | Return: ES:BX -> one-byte InDOS flag | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | the value of InDOS is incremented whenever an INT 21 function begins and decremented whenever one completes during an INT 28 call, it is safe to call some INT 21 functions even though InDOS may be 01h instead of zero | ||
+ | |||
+ | InDOS alone is not sufficient for determining when it is safe to enter DOS, as the critical error handling decrements InDOS and increments the critical error flag for the duration of the critical error. Thus, it is possible for InDOS to be zero even if DOS is busy. | ||
+ | |||
+ | the critical error flag is the byte immediately following InDOS in DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ (except COMPAQ DOS 3.0, where the critical error flag is located 1AAh bytes BEFORE the critical section flag) | ||
+ | |||
+ | For DOS 3.1+, an undocumented call exists to get the address of the critical error flag (see AX=5D06h) | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=5D06h, | ||
+ | |||
+ | ===== 35h - DOS 2+ - GET INTERRUPT VECTOR ===== | ||
+ | |||
+ | < | ||
+ | AH = 35h | ||
+ | AL = interrupt number | ||
+ | </ | ||
+ | < | ||
+ | Return: ES:BX -> current interrupt handler | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=25h, | ||
+ | |||
+ | ==== 357Fh - VIRUS - " | ||
+ | < | ||
+ | AX = 357Fh | ||
+ | </ | ||
+ | < | ||
+ | Return: DX = FFFFh if installed | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=33E0h, | ||
+ | |||
+ | ===== 36h - DOS 2+ - GET FREE DISK SPACE ===== | ||
+ | < | ||
+ | AH = 36h | ||
+ | DL = drive number (00h = default, 01h = A:, etc) | ||
+ | </ | ||
+ | < | ||
+ | Return: AX = FFFFh if invalid drive | ||
+ | else | ||
+ | AX = sectors per cluster | ||
+ | BX = number of free clusters | ||
+ | CX = bytes per sector | ||
+ | DX = total clusters on drive | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | free space on drive in bytes is AX * BX * CX | ||
+ | |||
+ | total space on drive in bytes is AX * CX * DX | ||
+ | |||
+ | "lost clusters" | ||
+ | |||
+ | according to Dave Williams' | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=1Bh, | ||
+ | |||
+ | ===== 37h ===== | ||
+ | |||
+ | ==== 3700h - DOS 2+ - " | ||
+ | |||
+ | AX = 3700h | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | DL = current switch character | ||
+ | FFh unsupported subfunction | ||
+ | Desc: | ||
+ | This setting is ignored by DOS commands in version 4.0 and higher, | ||
+ | but is honored by many third-party programs. | ||
+ | Notes: | ||
+ | supported by OS/2 compatibility box | ||
+ | always returns DL=2Fh for DOS 5.0 | ||
+ | SeeAlso: AX=3701h | ||
+ | |||
+ | ==== 3701h - DOS 2+ - " | ||
+ | |||
+ | AX = 3701h | ||
+ | DL = new switch character | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | FFh unsupported subfunction | ||
+ | Notes: | ||
+ | supported by OS/2 compatibility box | ||
+ | ignored by DOS 5.0 | ||
+ | SeeAlso: AX=3700h | ||
+ | |||
+ | ==== 37h - DOS 2.x and 3.3+ only - " | ||
+ | AH = 37h | ||
+ | AL = subfunction | ||
+ | 02h get availdev flag | ||
+ | Return: DL = 00h \DEV\ must precede character device names | ||
+ | = nonzero \DEV\ is optional | ||
+ | 03h set availdev flag | ||
+ | DL = 00h \DEV\ is mandatory | ||
+ | = nonzero \DEV\ is optional | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | FFh unsupported subfunction | ||
+ | Notes: all versions of DOS from 2.00 allow \DEV\ to be prepended to device | ||
+ | names without generating an error even if the directory \DEV does | ||
+ | not actually exist (other paths generate an error if they do not | ||
+ | exist). | ||
+ | although DOS 3.3+ accepts these calls, they have no effect, and | ||
+ | AL=02h always returns DL=FFh | ||
+ | ===== 38h - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION ===== | ||
+ | AH = 38h | ||
+ | --DOS 2.x-- | ||
+ | AL = 00h get current-country info | ||
+ | DS:DX -> buffer for returned info (see below) | ||
+ | Return: CF set on error | ||
+ | AX = error code (02h) | ||
+ | CF clear if successful | ||
+ | AX = country code (MSDOS 2.11 only) | ||
+ | buffer at DS:DX filled | ||
+ | --DOS 3+-- | ||
+ | AL = 00h for current country | ||
+ | AL = 01h thru 0FEh for specific country with code <255 | ||
+ | AL = 0FFh for specific country with code >= 255 | ||
+ | BX = 16-bit country code | ||
+ | DS:DX -> buffer for returned info (see below) | ||
+ | Return: CF set on error | ||
+ | AX = error code (02h) | ||
+ | CF clear if successful | ||
+ | BX = country code | ||
+ | DS:DX buffer filled | ||
+ | SeeAlso: AH=65h,INT 10/ | ||
+ | |||
+ | Format of PCDOS 2.x country info: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 1 = Europe dd mm yy | ||
+ | 2 = Japan yy mm dd | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 08h 24 BYTEs reserved | ||
+ | |||
+ | Format of MSDOS 2.x,DOS 3+ country info: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | bit 2 = set if currency symbol replaces decimal point | ||
+ | bit 1 = number of spaces between value and currency symbol | ||
+ | bit 0 = 0 if currency symbol precedes value | ||
+ | 1 if currency symbol follows value | ||
+ | | ||
+ | | ||
+ | bit 0 = 0 if 12-hour clock | ||
+ | 1 if 24-hour clock | ||
+ | | ||
+ | (FAR CALL, AL = character to map to upper case [>= 80h]) | ||
+ | | ||
+ | 18h 10 BYTEs reserved | ||
+ | |||
+ | Values for country code: | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ===== 38h - DOS 3+ - SET COUNTRY CODE ===== | ||
+ | AH = 38h | ||
+ | AL = 01h thru 0FEh for specific country with code <255 | ||
+ | AL = FFh for specific country with code >= 255 | ||
+ | BX = 16-bit country code | ||
+ | DX = FFFFh | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | Note: not supported by OS/2 | ||
+ | SeeAlso: INT 2F/AX=1403h | ||
+ | |||
+ | ===== 39h - DOS 2+ - " | ||
+ | AH = 39h | ||
+ | DS:DX -> ASCIZ pathname | ||
+ | Return: CF clear if successful | ||
+ | AX destroyed | ||
+ | CF set on error | ||
+ | AX = error code (03h,05h) (see AH=59h) | ||
+ | Notes: all directories in the given path except the last must exist | ||
+ | fails if the parent directory is the root and is full | ||
+ | DOS 2.x-3.3 allow the creation of a directory sufficiently deep that | ||
+ | it is not possible to make that directory the current directory | ||
+ | because the path would exceed 64 characters | ||
+ | SeeAlso: AH=3Ah, | ||
+ | |||
+ | ===== 3Ah - DOS 2+ - " | ||
+ | AH = 3Ah | ||
+ | DS:DX -> ASCIZ pathname of directory to be removed | ||
+ | Return: CF clear if successful | ||
+ | AX destroyed | ||
+ | CF set on error | ||
+ | AX = error code (03h, | ||
+ | Note: | ||
+ | SeeAlso: AH=39h, | ||
+ | |||
+ | ===== 3Bh - DOS 2+ - " | ||
+ | AH = 3Bh | ||
+ | DS:DX -> ASCIZ pathname to become current directory (max 64 bytes) | ||
+ | Return: CF clear if successful | ||
+ | AX destroyed | ||
+ | CF set on error | ||
+ | AX = error code (03h) (see AH=59h) | ||
+ | Notes: if new directory name includes a drive letter, the default drive is | ||
+ | not changed, only the current directory on that drive | ||
+ | changing the current directory also changes the directory in which | ||
+ | FCB file calls operate | ||
+ | SeeAlso: AH=47h,INT 2F/AX=1105h | ||
+ | |||
+ | ===== 3Ch - DOS 2+ - " | ||
+ | < | ||
+ | AH = 3CH | ||
+ | CX = file attribute | ||
+ | bit 0: read-only | ||
+ | 1: hidden | ||
+ | 2: system | ||
+ | 3: volume label (ignored) | ||
+ | 4: reserved, must be zero (directory) | ||
+ | 5: archive bit | ||
+ | 7: if set, file is shareable under Novell NetWare | ||
+ | DS:DX -> ASCIZ filename | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX = file handle | ||
+ | CF set on error | ||
+ | AX = error code (03h, | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | if a file with the given name exists, it is truncated to zero length | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=16h, | ||
+ | |||
+ | ===== 3Dh - DOS 2+ - " | ||
+ | < | ||
+ | AH = 3Dh | ||
+ | AL = access and sharing modes | ||
+ | bits 2-0: access mode | ||
+ | 000 read only | ||
+ | 001 write only | ||
+ | 010 read/write | ||
+ | bit 3: reserved (0) | ||
+ | bits 6-4: sharing mode (DOS 3+) | ||
+ | 000 compatibility mode | ||
+ | 001 " | ||
+ | 010 " | ||
+ | 011 " | ||
+ | 100 " | ||
+ | bit 7: inheritance | ||
+ | if set, file is private to current process and will not be inherited by child processes | ||
+ | DS:DX -> ASCIZ filename | ||
+ | CL = attribute mask of files to look for (server call only) | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX = file handle | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | file pointer is set to start of file | ||
+ | |||
+ | file handles which are inherited from a parent also inherit sharing and access restrictions | ||
+ | |||
+ | files may be opened even if given the hidden or system attributes | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=0Fh, | ||
+ | |||
+ | File sharing behavior: | ||
+ | | | Second and subsequent Opens |||||||||||||||| | ||
+ | | First Open | | ||
+ | | | | ||
+ | | Compat | ||
+ | | ::: | W | <color # | ||
+ | | ::: | RW | ||
+ | | | ||
+ | | Deny All | R | <color # | ||
+ | | ::: | W | <color # | ||
+ | | ::: | RW | ||
+ | | | ||
+ | | Deny Write | R | 2 | ||
+ | | ::: | W | <color # | ||
+ | | ::: | RW | ||
+ | | | ||
+ | | Deny Read | ||
+ | | ::: | W | <color # | ||
+ | | ::: | RW | ||
+ | | | ||
+ | | Deny None | ||
+ | | ::: | W | <color # | ||
+ | | ::: | RW | ||
+ | |||
+ | Legend: | ||
+ | Y = open succeeds, | ||
+ | N = open fails with error code 05h | ||
+ | C = open fails, INT 24 generated | ||
+ | 1 = open succeeds if file read-only, else fails with error code | ||
+ | 2 = open succeeds if file read-only, else fails with INT 24 | ||
+ | =====3DFFh - VIRUS - " | ||
+ | |||
+ | AX = 3DFFh | ||
+ | Return: AX = 4A44h if resident | ||
+ | SeeAlso: AX=357Fh, | ||
+ | |||
+ | ===== 3E - DOS 2+ - " | ||
+ | < | ||
+ | AH = 3Eh | ||
+ | BX = file handle | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX destroyed | ||
+ | CF set on error | ||
+ | AX = error code (06h) (see AH=59h) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | if the file was written to, any pending disk writes are performed, the time and date stamps are set to the current time, and the directory entry is updated | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=10h, | ||
+ | |||
+ | ===== 3Fh - DOS 2+ - " | ||
+ | < | ||
+ | AH = 3Fh | ||
+ | BX = file handle | ||
+ | CX = number of bytes to read | ||
+ | DS:DX -> buffer for data | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually read (0 if at EOF before call) | ||
+ | CF set on error | ||
+ | AX = error code (05h,06h) (see AH=59h) | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | data is read beginning at current file position, and the file position is updated after a successful read | ||
+ | |||
+ | the returned AX may be smaller than the request in CX if a partial read occurred | ||
+ | |||
+ | if reading from CON, read stops at first CR | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=27h, | ||
+ | |||
+ | ===== 3Fh - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK ===== | ||
+ | < | ||
+ | AH = 3Fh | ||
+ | BX = handle for character device " | ||
+ | CX = number of bytes to read | ||
+ | DS:DX -> buffer for status block (see below) | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually read | ||
+ | CF set on error | ||
+ | AX = error code (05h,06h) (see AH=59h) | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=40h" | ||
+ | |||
+ | Format of status block: | ||
+ | ^ Offset | ||
+ | | 00h | BYTE | status of command | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | ---status for command 01h--- | ||
+ | | 01h | WORD | device driver interface version number (currently 1) | | ||
+ | | 03h | WORD | device driver software version | ||
+ | | 05h | BYTE | maximum simultaneous hardware breakpoints | ||
+ | | 06h | BYTE | configuration bits\\ | ||
+ | | 07h | BYTE | supported breakpoint types\\ | ||
+ | | 08h | WORD | supported addressing match modes\\ | ||
+ | | 0Ah | WORD | supported data matches\\ | ||
+ | | 0Ch | BYTE | maximum data match length (01h, 02h, or 04h) | | ||
+ | | 0Dh | WORD | size of onboard memory (in K) | | ||
+ | | 0Fh | WORD | maximum number of trace-back events | ||
+ | | 11h | WORD | hardware breakpoint enable byte address segment (0000h if not supported) | ||
+ | | ---status for command 04h--- | ||
+ | | 01h | BYTE | handle to use when referring to the just-set breakpoint | ||
+ | |||
+ | ===== 3Fh - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA ===== | ||
+ | < | ||
+ | AH = 3Fh | ||
+ | BX = handle for character device " | ||
+ | CX = number of bytes to read | ||
+ | DS:DX -> buffer for configuration data (see below) | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually read | ||
+ | CF set on error | ||
+ | AX = error code (05h,06h) (see AH=59h) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | if less than the entire data is read or written, the next read/write continues where the previous one ended; IOCTL calls AX=4402h and AX=4403h both reset the location at which the next operation starts to zero | ||
+ | |||
+ | the data pointer is also reset to zero if the previous read or write reached or exceeded the end of the data, when the current function is read and the previous was write, or vice versa | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=40h" | ||
+ | |||
+ | Format of configuration data: | ||
+ | ^ Offset | ||
+ | | 00h | 12 BYTEs | IPCUST.SYS device driver header | ||
+ | | 12h | BYTE | ??? | | ||
+ | | 13h | BYTE | ??? | | ||
+ | | 14h | WORD | ??? | | ||
+ | | 16h | BYTE | bit flags\\ bit 0: send BS rather than DEL for BackSpace key\\ bit 1: wrap long lines | | ||
+ | | 17h | BYTE | ??? | | ||
+ | | 18h | 64 BYTEs | ASCIZ hostname | ||
+ | | 58h | 64 BYTEs | ASCIZ domain name\\ (fully qualified domain name is hostname.domain-name) | ||
+ | | 98h | 16 BYTEs | ASCIZ username | ||
+ | | A8h | 64 BYTEs | ASCIZ full name | | ||
+ | | E8h | 64 BYTEs | ASCIZ office address | ||
+ | | 128h | 32 BYTEs | ASCIZ phone number | ||
+ | | 148h | WORD | offset from GMT in minutes | ||
+ | | 14Ah | 4 BYTEs | ASCIZ timezone name | | ||
+ | | 14Eh | WORD | number of time servers | ||
+ | | 150h | ? DWORDs | ||
+ | | | ??? | | | ||
+ | | 164h | WORD | number of old-style name servers | ||
+ | | 166h | 3 DWORDs | ||
+ | | 172h | WORD | number of domain name servers | ||
+ | | 174h | 3 DWORDs | ||
+ | | 180h | DWORD | IP address of default gateway (big-endian) | ||
+ | | 184h | DWORD | IP address of log server (big-endian) | ||
+ | | 188h | DWORD | IP address of cookie server (big-endian) | ||
+ | | 18Ch | DWORD | IP address of lpr server (big-endian) | ||
+ | | 190h | DWORD | IP address of imagen print server | ||
+ | | 194h | 54 BYTEs | ??? | | ||
+ | | 1E8h | WORD | TCP default window size in bytes | | ||
+ | | 1EAh | WORD | TCP low window size | | ||
+ | | 1ECh | 64 BYTEs | ASCIZ host tabel filename | ||
+ | | 22Ch | 2 BYTEs | ??? | | ||
+ | | 22Eh | 80 BYTEs | ASCIZ mail relay host name | | ||
+ | | 27Eh | BYTE | ??? | | ||
+ | | 27Fh | BYTE | ??? bit flags | | ||
+ | | 280h | 44 BYTEs | ??? | | ||
+ | | 2ACh | WORD | ??? | | ||
+ | | 2AEh | 202 BYTEs | ??? | | ||
+ | |||
+ | ===== 40h - DOS 2+ - " | ||
+ | < | ||
+ | AH = 40h | ||
+ | BX = file handle | ||
+ | CX = number of bytes to write | ||
+ | DS:DX -> data to write | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually written | ||
+ | CF set on error | ||
+ | AX = error code (05h,06h) (see AH=59h) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | if CX is zero, no data is written, and the file is truncated or extended to the current position | ||
+ | |||
+ | data is written beginning at current file position, and the file position is updated after a successful write | ||
+ | |||
+ | the usual cause for AX < CX on return is a full disk | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=28h, | ||
+ | |||
+ | ===== 40h - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER ===== | ||
+ | < | ||
+ | AH = 40h | ||
+ | BX = handle for character device " | ||
+ | CX = number of bytes to write | ||
+ | DS:DX -> hardware breakpoint command (see below) | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually written | ||
+ | CF set on error | ||
+ | AX = error code (05h,06h) (see AH=59h) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | results are retrieved by reading from the device | ||
+ | </ | ||
+ | SeeAlso: AH=3Fh" | ||
+ | |||
+ | Format of hardware breakpoint commands: | ||
+ | ^ Offset | ||
+ | | 00h | BYTE | command code | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | ---command code 00h--- | ||
+ | | 01h | DWORD | pointer to Turbo Debugger entry point to be jumped to on hardware breakpoint; call with CPU state the same as on the breakpoint except for pushing AX and placing an entry code (FFh if breakout button or breakpoint handle) in AH | | ||
+ | | ---command code 04h--- | ||
+ | | 01h | BYTE | breakpoint type:\\ 00h memory read\\ 01h memory write\\ 02h memory read/ | ||
+ | | 02h | BYTE | address matching mode: \\ 00h any address\\ 01h equal to test value\\ 02h different from test value\\ 03h above test value\\ 04h below test value\\ 05h below or equal to test value\\ 06h above or equal to test value\\ 07h within inclusive range\\ 08h outside specified range | | ||
+ | | 03h | DWORD | 32-bit linear low address | ||
+ | | 07h | DWORD | 32-bit linear high address | ||
+ | | 0Bh | WORD | pass count | | ||
+ | | 0Dh | BYTE | data size (01h, 02h, or 04h) | | ||
+ | | 0Eh | BYTE | source of matched bus cycle\\ 01h CPU\\ 02h DMA\\ 03h either | ||
+ | | 0Fh | BYTE | data-matching mode\\ 00h match any\\ 01h equal to test value\\ 02h different from test value\\ 03h above test value\\ 04h below test value\\ 05h below or equal to test value\\ 06h above or equal to test value\\ 07h within specified range\\ 08h outside specified range | | ||
+ | | 10h | DWORD | low data value | | ||
+ | | 14h | DWORD | high data value | | ||
+ | | 18h | DWORD | data mask specifying which bits of the data are tested | ||
+ | | ---command code 05h--- | ||
+ | | 01h | BYTE | handle of breakpoint to clear (breakpoint returned from command 04h) | | ||
+ | | ---command code 06h--- | ||
+ | | 01h | WORD | ||
+ | |||
+ | ===== 40h - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA ===== | ||
+ | < | ||
+ | AH = 40h | ||
+ | BX = handle for character device " | ||
+ | CX = number of bytes to write | ||
+ | DS:DX -> buffer for configuration data (AH=3Fh" | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually written | ||
+ | CF set on error | ||
+ | AX = error code (05h,06h) (see AH=59h) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | if less than the entire data is read or written, the next read/write continues where the previous one ended; IOCTL calls AX=4402h and AX=4403h both reset the location at which the next operation starts to zero | ||
+ | |||
+ | the data pointer is also reset to zero if the previous read or write reached or exceeded the end of the data, when the current function is read and the previous was write, or vice versa | ||
+ | </ | ||
+ | SeeAlso: AH=3Fh" | ||
+ | |||
+ | ===== 4000 - FARTBELL.EXE - INSTALLATION CHECK ===== | ||
+ | < | ||
+ | AX = 4000h | ||
+ | BX = 0002h | ||
+ | CX = 0000h | ||
+ | DS:DX = 0000h:0000h | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if installed | ||
+ | AX = CS of resident code | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | FARTBELL is a joke program by Guenther Thiele which makes various noises when programs output a bell | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4001h | ||
+ | |||
+ | ===== 4001 - FARTBELL.EXE - FORCE NOISE ===== | ||
+ | < | ||
+ | AX = 4001h | ||
+ | BX = 0002h | ||
+ | CX = 0000h | ||
+ | DS:DX = 0000h:0000h | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | FARTBELL is a joke program by Guenther Thiele which makes various noises when programs output a bell | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4000h | ||
+ | |||
+ | ===== 41 - DOS 2+ - " | ||
+ | < | ||
+ | AH = 41h | ||
+ | DS:DX -> ASCIZ filename (no wildcards, but see below) | ||
+ | CL = attribute mask for deletion (server call only, see below) | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX destroyed (DOS 3.3) AL seems to be drive of deleted file | ||
+ | CF set on error | ||
+ | AX = error code (02h, | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case the filespec must be canonical (as returned by AH=60h), and only files matching the attribute mask in CL are deleted | ||
+ | |||
+ | DOS does not erase the file's data; it merely becomes inaccessible because the FAT chain for the file is cleared | ||
+ | |||
+ | deleting a file which is currently open may lead to filesystem corruption. Unless SHARE is loaded, DOS does not close the handles referencing the deleted file, thus allowing writes to a nonexistant file. | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=13h, | ||
+ | |||
+ | ===== 4101 - SoftLogic Data Guardian - ??? ===== | ||
+ | < | ||
+ | AX = 4101h | ||
+ | DX = FFFEh | ||
+ | </ | ||
+ | < | ||
+ | Return: AX = 0000h if installed | ||
+ | </ | ||
+ | Note: | ||
+ | |||
+ | ===== 42h - DOS 2+ - " | ||
+ | < | ||
+ | AH = 42h | ||
+ | AL = origin of move | ||
+ | 00h start of file | ||
+ | 01h current file position | ||
+ | 02h end of file | ||
+ | BX = file handle | ||
+ | CX:DX = offset from origin of new file position | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | DX:AX = new file position in bytes from start of file | ||
+ | CF set on error | ||
+ | AX = error code (01h,06h) (see AH=59h) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | for origins 01h and 02h, the pointer may be positioned before the start of the file; no error is returned in that case, but subsequent attempts at I/O will produce errors | ||
+ | |||
+ | if the new position is beyond the current end of file, the file will be extended by the next write (see AH=40h) | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=24h,INT 2F/AX=1228h | ||
+ | |||
+ | ===== 4203h - VIRUS - " | ||
+ | < | ||
+ | AX = 4203h | ||
+ | </ | ||
+ | < | ||
+ | Return: AX = 1234h if resident | ||
+ | </ | ||
+ | SeeAlso: AX=3DFFh, | ||
+ | |||
+ | ===== 4243h - VIRUS - " | ||
+ | < | ||
+ | AX = 4243h | ||
+ | </ | ||
+ | < | ||
+ | Return: AX = 5678h if resident | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4203h, | ||
+ | |||
+ | ===== 43h ===== | ||
+ | |||
+ | ==== 4300h - DOS 2+ - GET FILE ATTRIBUTES ==== | ||
+ | < | ||
+ | AX = 4300h | ||
+ | DS:DX -> ASCIZ filename | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | CX = attributes (see AX=4301h) | ||
+ | AX = CX (DR-DOS 5.0) | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4301h, | ||
+ | |||
+ | ==== 4301h - DOS 2+ - " | ||
+ | < | ||
+ | AX = 4301h | ||
+ | CX = new attributes | ||
+ | bit 8: shareable (Novell NetWare) | ||
+ | 7: unused | ||
+ | 6: unused | ||
+ | 5: archive | ||
+ | 4: directory | ||
+ | 3: volume label | ||
+ | 2: system | ||
+ | 1: hidden | ||
+ | 0: read-only | ||
+ | DS:DX -> ASCIZ filename | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX destroyed | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | will not change volume label or directory attribute bits, but will change the other attribute bits of a directory (the directory bit must be cleared to successfully change the other attributes of a directory, but the directory will not be changed to a normal file as a result) | ||
+ | |||
+ | |||
+ | MSDOS 4.01 reportedly closes the file if it is currently open | ||
+ | </ | ||
+ | SeeAlso: AX=4300h, | ||
+ | |||
+ | ==== 4302h - DR-DOS 3.41+ internal - GET ACCESS RIGHTS ==== | ||
+ | < | ||
+ | AX = 4302h | ||
+ | DS:DX -> ASCIZ pathname | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | CX = access rights | ||
+ | bit 0 delete requires password | ||
+ | bit 2 write requires password | ||
+ | bit 3 read requires password | ||
+ | bits 4-7=equal to bits 0-3 | ||
+ | bits 8-11=equal to bits 0-3 | ||
+ | AX = CX (DR-DOS 5.0) | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | < | ||
+ | <WRAP round box> | ||
+ | Determine which operations the calling program may perform on a specified file without being required to provide a password. | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4303h | ||
+ | |||
+ | ==== 4303h - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD ==== | ||
+ | < | ||
+ | AX = 4303h | ||
+ | CX = access rights | ||
+ | bit 0 delete requires password | ||
+ | bit 2 write requires password | ||
+ | bit 3 read requires password | ||
+ | bits 4-7=equal to bits 0-3 | ||
+ | bits 8-11=equal to bits 0-3 | ||
+ | bit 15 new password is to be set | ||
+ | DS:DX -> ASCIZ pathname | ||
+ | [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters) | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | if the file is already protected, the old password must be added after the pathname, separated by a ";" | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4302h, | ||
+ | |||
+ | ==== 4304h - DR-DOS 5.0 internal - GET ??? ==== | ||
+ | < | ||
+ | AX = 4304h | ||
+ | ??? | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | CX = AX = ??? | ||
+ | CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4305h | ||
+ | |||
+ | ==== 4305h - DR-DOS 5.0 internal - SET ??? ==== | ||
+ | < | ||
+ | AX = 4305h | ||
+ | ??? | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | /code> | ||
+ | |||
+ | SeeAlso: AX=4304h | ||
+ | |||
+ | ===== 4400h - DOS 2+ - IOCTL - GET DEVICE INFORMATION ===== | ||
+ | |||
+ | < | ||
+ | AX = 4400h | ||
+ | BX = handle | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | DX = device information word | ||
+ | character device | ||
+ | 14: device driver can process IOCTL requests (see AX=4402h) | ||
+ | 13: output until busy supported | ||
+ | 11: driver supports OPEN/CLOSE calls | ||
+ | 7: set (indicates device) | ||
+ | 6: EOF on input | ||
+ | 5: raw (binary) mode | ||
+ | 4: device is special (uses INT 29) | ||
+ | 3: clock device | ||
+ | 2: NUL device | ||
+ | 1: standard output | ||
+ | 0: standard input | ||
+ | disk file | ||
+ | 15: file is remote (DOS 3+) | ||
+ | 14: don't set file date/time on closing (DOS 3+) | ||
+ | 11: media not removable | ||
+ | 8: (DOS 4+) generate INT 24 if no disk space on write | ||
+ | 7: clear (indicates file) | ||
+ | 6: file has not been written | ||
+ | 5-0: drive number (0 = A:) | ||
+ | AX destroyed | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | value in DH corresponds to high byte of device driver' | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4401h, | ||
+ | |||
+ | ===== 44h ===== | ||
+ | |||
+ | ==== 4401h - DOS 2+ - IOCTL - SET DEVICE INFORMATION ==== | ||
+ | < | ||
+ | AX = 4401h | ||
+ | BX = handle (must refer to character device) | ||
+ | DX = device information word (see AX=4400h) | ||
+ | (DH must be zero) | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4400h, | ||
+ | |||
+ | ===== 4402h - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL ===== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = file handle referencing character device | ||
+ | CX = number of bytes to read | ||
+ | DS:DX -> buffer | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually read | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: | ||
+ | SeeAlso: AX=4400h, | ||
+ | |||
+ | ===== 4402h - Network Driver Interface Spec 2.0.1 - PROTOCOL MANAGER ===== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = file handle for device " | ||
+ | DS:DX -> request block (see below) | ||
+ | CX = 000Eh (size of request block) | ||
+ | |||
+ | == Format of request block for GetProtocolManagerInfo: | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h|WORD|01h| | ||
+ | |02h|WORD|returned status (see below)| | ||
+ | |04h|DWORD|returned pointer to structure representing parsed user config| | ||
+ | |08h|DWORD|unused| | ||
+ | |0Ch|WORD|returned BCD version of NDIS on which Protocol Manager is based| | ||
+ | |||
+ | == Format of request block for RegisterModule: | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h|WORD|02h| | ||
+ | |02h|WORD|returned status (see below)| | ||
+ | |04h|DWORD|pointer to module' | ||
+ | |08h|DWORD|pointer to list of modules to which the module is to be bound| | ||
+ | |0Ch|WORD|unused| | ||
+ | |||
+ | == Format of request block for BindAndStart: | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h|WORD|03h| | ||
+ | |02h|WORD|returned status (see below)| | ||
+ | |04h|DWORD|caller' | ||
+ | |08h|DWORD|unused| | ||
+ | |0Ch|WORD|unused| | ||
+ | |||
+ | == Format of request block for GetProtocolManagerLinkage: | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h|WORD|04h| | ||
+ | |02h|WORD|returned status (see below)| | ||
+ | |04h|DWORD|returned dispatch point| | ||
+ | |08h|DWORD|unused| | ||
+ | |0Ch|WORD|returned protocol manager DS| | ||
+ | |||
+ | <WRAP round box> | ||
+ | the dispatch point may be called as follows instead of using this IOCTL | ||
+ | < | ||
+ | STACK: WORD protocol manager DS | ||
+ | DWORD pointer to request block | ||
+ | </ | ||
+ | < | ||
+ | Return: AX = returned status | ||
+ | STACK popped | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | == Format of request block for GetProtocolIniPath: | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h|WORD|05h| | ||
+ | |02h|WORD|returned status (see below)| | ||
+ | |04h|DWORD|pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI| | ||
+ | |08h|DWORD|unused| | ||
+ | |0Ch|WORD|buffer length| | ||
+ | |||
+ | == Format of request block for RegisterProtocolManagerInfo: | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h|WORD|06h| | ||
+ | |02h|WORD|returned status (see below)| | ||
+ | |04h|DWORD|pointer to structure containing parsed user config file| | ||
+ | |08h|DWORD|unused| | ||
+ | |0Ch|WORD|length of structure| | ||
+ | |||
+ | == Format of request block for InitAndRegister: | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h|WORD|07h| | ||
+ | |02h|WORD|returned status (see below)| | ||
+ | |04h|DWORD|unused| | ||
+ | |08h|DWORD|poitner to ASCIZ name of the module to be prebind initialized| | ||
+ | |0Ch|WORD|unused| | ||
+ | |||
+ | == Format of request block for UnbindAndStop: | ||
+ | ^ Offset | ||
+ | | 00h | WORD | 08h | | ||
+ | | 02h | WORD | returned status (see below) | ||
+ | | 04h | DWORD | failing modules as for BindAndStart | ||
+ | | 08h | DWORD | if not 0000h: | ||
+ | | 0Ch | WORD | ||
+ | |||
+ | == Format of request block for BindStatus: == | ||
+ | ^ Offset | ||
+ | | 00h | WORD | 09h | | ||
+ | | 02h | WORD | returned status (see below) | ||
+ | | 04h | DWORD | must be 0000h: | ||
+ | | 08h | DWORD | 0000h: | ||
+ | | 0Ch | WORD | unused under DOS | | ||
+ | |||
+ | == Format of request block for RegisterStatus: | ||
+ | ^ Offset | ||
+ | | 00h | WORD | 0Ah | | ||
+ | | 02h | WORD | returned status (0000h, 0008h, 002Ch) (see below) | ||
+ | | 04h | DWORD | 0000h: | ||
+ | | 08h | DWORD | pointer to 16-byte ASCIZ module name | | ||
+ | | 0Ch | WORD | 0000h | | ||
+ | |||
+ | == Values of status code: == | ||
+ | | 0000h |success| | ||
+ | | 0001h |wait for release--protocol has retained control of the data buffer| | ||
+ | | 0002h |request queued| | ||
+ | | 0003h |frame not recognized| | ||
+ | | 0004h |frame rejected| | ||
+ | | 0005h |frame should be forwarded| | ||
+ | | 0006h |out of resource| | ||
+ | | 0007h |invalid parameter| | ||
+ | | 0008h |invalid function| | ||
+ | | 0009h |not supported| | ||
+ | | 000Ah |hardware error| | ||
+ | | 000Bh |transmit error| | ||
+ | | 000Ch |unrecognized destination| | ||
+ | | 000Dh |buffer too small| | ||
+ | | 0020h |already started| | ||
+ | | 0021h |binding incomplete| | ||
+ | | 0022h |driver not initialized| | ||
+ | | 0023h |hardware not found| | ||
+ | | 0024h |hardware failure| | ||
+ | | 0025h |configuration failure| | ||
+ | | 0026h |interrupt conflict| | ||
+ | | 0027h |MAC incompatible| | ||
+ | | 0028h |initialization failed| | ||
+ | | 0029h |no binding| | ||
+ | | 002Ah |network may be disconnected| | ||
+ | | 002Bh |incompatible OS version| | ||
+ | | 002Ch |already registered| | ||
+ | | 002Dh |path not found| | ||
+ | | 002Eh |insufficient memory| | ||
+ | | 002Fh |info not found| | ||
+ | | 00FFh |general failure| | ||
+ | | F000h-|FFFFh reserved for vendor-specific codes, treated as general failure| | ||
+ | |||
+ | == Format of common characteristics table: == | ||
+ | ^ Offset | ||
+ | | 00h | WORD | size of table in bytes | | ||
+ | | 02h | BYTE | NDIS major version | ||
+ | | 03h | BYTE | NDIS minor version | ||
+ | | 04h | WORD | reserved | ||
+ | | 06h | BYTE | module major version | ||
+ | | 07h | BYTE | module minor version | ||
+ | | 08h | DWORD | module function flag bits\\ bit 0: binding at upper boundary supported\\ bit 1: binding at lower boundary supported\\ bit 2: dynamically bound\\ bits 3-31 reserved, must be 0 | | ||
+ | | 0Ch | 16 BYTEs | ASCIZ module name | | ||
+ | | 1Ch | BYTE | upper boundary protocol level\\ 01h Media Access Control\\ 02h Data link\\ 03h network\\ 04h transport\\ 05h session\\ FFh not specified | ||
+ | | 1Dh | BYTE | upper boundary interface type\\ for MACs: 1 = MAC\\ for data links and transports: to be defined\\ for session: 1 = NCB\\ any level: 0 = private (ISV-defined) | ||
+ | | 1Eh | BYTE | lower boundary protocol level\\ 00h physical\\ 01h Media Access Control\\ 02h Data link\\ 03h network\\ 04h transport\\ 05h session\\ FFh not specified | ||
+ | | 1Fh | BYTE | lower boundary interface type same as offset 1Dh | | ||
+ | | 20h | WORD | module ID filled in by protocol manager | ||
+ | | 22h | WORD | module DS | | ||
+ | | 24h | DWORD | system request entry point | | ||
+ | | 28h | DWORD | pointer to service-specific characteristics \\ 0000h:0000h if none | | ||
+ | | 2Ch | DWORD | pointer to service-specific status \\ 0000h:0000h if none | | ||
+ | | 30h | DWORD | pointer to upper dispatch table (see below) \\ 0000h:0000h if none | | ||
+ | | 34h | DWORD | pointer to lower dispatch table (see below) \\ 0000h:0000h if none | | ||
+ | | 38h | DWORD | reserved, must be 0 | | ||
+ | | 3Ch | DWORD | reserved, must be 0 | | ||
+ | |||
+ | |||
+ | <WRAP round box> | ||
+ | for compatibility with NDIS 1.x.x, a major version of 00h is interpreted as 01h | ||
+ | </ | ||
+ | |||
+ | == Format of MAC Service-Specific Characteristics Table: == | ||
+ | ^ Offset | ||
+ | | 00h | WORD | length of table in bytes | | ||
+ | | 02h | 16 BYTEs | ASCIZ MAC type name, " | ||
+ | | 12h | WORD | length of station addresses in bytes | | ||
+ | | 14h | 16 BYTEs | permanent station address | ||
+ | | 24h | 16 BYTEs | current station address | ||
+ | | 34h | DWORD | current functional adapter address (00000000h if none) | | ||
+ | | 38h | DWORD | pointer to multicast address list | | ||
+ | | 3Ch | DWORD | link speed in bits/ | ||
+ | | 40h | DWORD | service flags\\ bit 0: supports broadcast\\ bit 1: supports multicast\\ bit 2: supports functional/ | ||
+ | | 44h | WORD | maximum frame size which may be both sent and received | ||
+ | | 46h | DWORD | total transmit buffer capacity in bytes | | ||
+ | | 4Ah | WORD | transmit buffer allocation block size in bytes | | ||
+ | | 4Ch | DWORD | total receive buffer capacity in bytes | | ||
+ | | 50h | WORD | receive buffer allocation block size in bytes | | ||
+ | | 52h | 3 BYTEs | IEEE vendor code | | ||
+ | | 55h | BYTE | vendor adapter code | | ||
+ | | 56h | DWORD | pointer to ASCIZ vendor adapter description | ||
+ | | 5Ah | WORD | IRQ used by adapter | ||
+ | | 5Ch | WORD | transmit queue depth | | ||
+ | | 5Eh | WORD | maximum supported number of data blocks in buffer descriptors | ||
+ | | 60h | N BYTEs | ||
+ | |||
+ | == Format of NetBIOS Service-Specific Characteristics Table: == | ||
+ | ^ Offset ^ Size ^Description^ | ||
+ | | 00h|WORD |length of table in bytes| | ||
+ | | 02h |16 BYTEs |ASCIZ type name of NetBIOS module| | ||
+ | | 12h|WORD |NetBIOS module code| | ||
+ | | 14h |N BYTEs |vendor-specific info| | ||
+ | |||
+ | == Format of MAC Service-Specific Status Table: == | ||
+ | ^ Offset | ||
+ | | 00h | WORD | length of table in bytes | | ||
+ | | 02h | DWORD | seconds since 0:00 1/1/70 when diagnostics last run (FFFFFFFFh = never) | ||
+ | | 06h | DWORD | MAC status bits\\ bits 0-2: \\ * 000 hardware not installed\\ | ||
+ | | 0Ah | WORD | current packet filter flags\\ bit 0: directed/ | ||
+ | | 0Ch | DWORD | pointer to media-specific status table or 0000h: | ||
+ | | 10h | DWORD | seconds past 0:00 1/1/70 of last ClearStatistics | ||
+ | | 14h | DWORD | total frames received (FFFFFFFFh = not counted) | ||
+ | | 18h | DWORD | frames with CRC error (FFFFFFFFh = not counted) | ||
+ | | 1Ch | DWORD | total bytes received (FFFFFFFFh = not counted) | ||
+ | | 20h | DWORD | frames discarded--no buffer space (FFFFFFFFh = not counted) | ||
+ | | 24h | DWORD | multicast frames received (FFFFFFFFh = not counted) | ||
+ | | 28h | DWORD | broadcast frames received (FFFFFFFFh = not counted) | ||
+ | | 2Ch | DWORD | frames with errors (FFFFFFFFh = not counted) | ||
+ | | 30h | DWORD | overly large frames (FFFFFFFFh = not counted) | ||
+ | | 34h | DWORD | frames less than minimum size (FFFFFFFFh = not counted) | ||
+ | | 38h | DWORD | multicast bytes received (FFFFFFFFh = not counted) | ||
+ | | 3Ch | DWORD | broadcast bytes received (FFFFFFFFh = not counted) | ||
+ | | 40h | DWORD | frames discarded--hardware error (FFFFFFFFh = not counted) | ||
+ | | 44h | DWORD | total frames transmitted (FFFFFFFFh = not counted) | ||
+ | | 48h | DWORD | total bytes transmitted (FFFFFFFFh = not counted) | ||
+ | | 4Ch | DWORD | multicast frames transmitted (FFFFFFFFh = not counted) | ||
+ | | 50h | DWORD | broadcast frames transmitted (FFFFFFFFh = not counted) | ||
+ | | 54h | DWORD | broadcast bytes transmitted (FFFFFFFFh = not counted) | ||
+ | | 58h | DWORD | multicast bytes transmitted (FFFFFFFFh = not counted) | ||
+ | | 5Ch | DWORD | frames not transmitted--timeout (FFFFFFFFh = not counted) | ||
+ | | 60h | DWORD | frames not transmitted--hardware error (FFFFFFFFh = not countd) | ||
+ | | 64h | N BYTEs | vendor-specific info | | ||
+ | |||
+ | ==== 4402h - U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ??? ==== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = handle for character device " | ||
+ | CX = number of bytes to read (>= 4) | ||
+ | DS:DX -> buffer (see below) | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | AX = number of bytes read | ||
+ | |||
+ | Format of returned data: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ==== 4402h - U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE ==== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = handle for device " | ||
+ | CX = 0004h | ||
+ | DS:DX -> DWORD to hold address of 39-byte table of ??? | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | AX = number of bytes read | ||
+ | Note: | ||
+ | SeeAlso: AX=4402h" | ||
+ | |||
+ | ==== 4402h - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS ==== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = handle for device " | ||
+ | CX = 0004h | ||
+ | DS:DX -> DWORD to hold entry point | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | AX = number of bytes read | ||
+ | Note: | ||
+ | SeeAlso: AX=4402h" | ||
+ | |||
+ | Call HIGHUMM.SYS entry point with: | ||
+ | AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/ | ||
+ | DX = size in paragraphs | ||
+ | Return: BX = segment number (if successful) | ||
+ | DX = size of requested block/size of largest block | ||
+ | AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/ | ||
+ | DX = segment number of UMB | ||
+ | AH = 02h request a bank-switched memory block | ||
+ | DX = size in paragraphs | ||
+ | Return: BX = segment number (if successful) | ||
+ | DX = size of requested block/size of largest block | ||
+ | AH = 03h release a bank-switched memory block | ||
+ | DX = segment number | ||
+ | AH = 04h transfer data to/from high memory | ||
+ | DS:SI -> source | ||
+ | ES:DI -> destination | ||
+ | CX = length in bytes | ||
+ | Note: enables bank-switched memory, does the copy, then disables | ||
+ | bank-switched memory | ||
+ | AH = 05h get a word from bank-switched memory | ||
+ | ES:DI -> word to read | ||
+ | Return: DX = word | ||
+ | AH = 06h put a word to bank-switched memory | ||
+ | ES:DI -> word to write | ||
+ | DX = word | ||
+ | AH = 07h put a byte to bank-switched memory | ||
+ | ES:DI -> byte to write | ||
+ | DL = byte | ||
+ | AH = 08h enable bank-switched memory | ||
+ | DS:SI -> 6-byte status save area | ||
+ | AH = 09h disable bank-switched memory | ||
+ | DS:SI -> 6-byte save area from enable call (AH=08h) | ||
+ | AH = 0Ah assign name to UMB or high bank-switched block | ||
+ | DX = segment number | ||
+ | DS:SI -> 8-byte blank-padded name | ||
+ | AH = 0Bh locate UMB block by name | ||
+ | DS:SI -> 8-byte blank-padded name | ||
+ | Return: BX = segment number (if successful) | ||
+ | DX = size of block | ||
+ | AH = 0Ch locate bank-switched block by name | ||
+ | DS:SI -> 8-byte blank-padded name | ||
+ | Return: BX = segment number (if successful) | ||
+ | DX = size of block | ||
+ | Return: AX = status code | ||
+ | 0001h successful | ||
+ | 0000h failed | ||
+ | BL = error code | ||
+ | 80h not implemented | ||
+ | B0h insufficient memory, smaller block available | ||
+ | B1h insufficient memory, no blocks available | ||
+ | B2h invalid segment number | ||
+ | Note: only functions 00h and 01h are always available; the remaining | ||
+ | functions are only enabled if the proper commandline switch is given | ||
+ | |||
+ | ==== 4402h - SMARTDRV.SYS - IOCTL - GET CACHE STATUS ==== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = file handle for device " | ||
+ | CX = number of bytes to read (min 28h) | ||
+ | DS:DX -> buffer for status record (see below) | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually read | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | SeeAlso: AX=4403h" | ||
+ | |||
+ | Format of SMARTDRV status record: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ==== 4402h - CD-ROM device driver - IOCTL INPUT ==== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = file handle referencing character device for CD-ROM driver | ||
+ | CX = number of bytes to read | ||
+ | DS:DX -> control block (see below) | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually read | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: the data returned depends on the first byte of the control block; the | ||
+ | remainder of the control block is filled by the driver | ||
+ | SeeAlso: AX=4403h" | ||
+ | |||
+ | Format of control block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 00h device driver header address | ||
+ | 01h drive head location | ||
+ | 02h reserved | ||
+ | 03h error statistics | ||
+ | 04h audio channel info | ||
+ | 05h raw drive bytes (uninterpreted and device-specific) | ||
+ | 06h device status | ||
+ | 07h sector size | ||
+ | 08h volume size | ||
+ | 09h media change status | ||
+ | 0Ah audio disk info | ||
+ | 0Bh audio track info | ||
+ | 0Ch audio Q-Channel info | ||
+ | 0Dh audio sub-channel info | ||
+ | 0Eh UPC code | ||
+ | ---function 00h--- | ||
+ | | ||
+ | ---function 01h--- | ||
+ | | ||
+ | 00h HSG | ||
+ | 01h Red Book | ||
+ | | ||
+ | logical sector number in HSG mode | ||
+ | frame/ | ||
+ | (HSG sector = minute * 4500 + second * 75 + frame - 150) | ||
+ | ---function 03h--- | ||
+ | | ||
+ | ---function 04h--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Notes: | ||
+ | right prime; a volume of 00h is off | ||
+ | the default setting is for each input channel to be assigned to the | ||
+ | same-numbered output channel at full (FFh) volume | ||
+ | ---function 05h--- | ||
+ | | ||
+ | 02h 128 BYTEs buffer for drive bytes | ||
+ | ---function 06h--- | ||
+ | | ||
+ | bit 0: door open | ||
+ | 1: door unlocked | ||
+ | 2: supports raw reading in addition to cooked | ||
+ | 3: writable | ||
+ | 4: can play audio/video tracks | ||
+ | 5: supports interleaving | ||
+ | 6: reserved | ||
+ | 7: supports prefetch requests | ||
+ | 8: supports audio channel control | ||
+ | 9: supports Red Book addressing in addition to HSG | ||
+ | 10: audio is playing | ||
+ | ---function 07h--- | ||
+ | | ||
+ | 00h cooked | ||
+ | 01h raw | ||
+ | | ||
+ | ---function 08h--- | ||
+ | | ||
+ | ---function 09h--- | ||
+ | | ||
+ | 00h don't know | ||
+ | 01h media unchanged | ||
+ | FFh media has been changed | ||
+ | ---function 0Ah--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | --function 0Bh--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | bits 15,14,12: track type (notice: bits not contiguous!) | ||
+ | 000 two audio channels, no pre-emphasis | ||
+ | 001 two audio channels with pre-emphasis | ||
+ | 010 data track | ||
+ | 100 four audio channels, no pre-emphasis | ||
+ | 101 four audio channels with pre-emphasis | ||
+ | other reserved | ||
+ | bit 13: digital copy permitted | ||
+ | ---function 0Ch--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ---function 0Dh--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | Note: | ||
+ | ---function 0Eh--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ==== 4402h - U - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT ==== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = file handle for device " | ||
+ | CX = 0004h | ||
+ | DS:DX -> DWORD buffer for API entry point | ||
+ | Return: CF clear if successful | ||
+ | buffer filled (see INT 67/AH=3Fh for entry point parameters) | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | SeeAlso: AX=4402h" | ||
+ | |||
+ | ==== 4402h - U - Quarterdeck - QEMM-386 v6+ - GET ??? ==== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = file handle for device " | ||
+ | CX = 0006h (size of buffer in bytes) | ||
+ | DS:DX -> buffer for ??? | ||
+ | first byte must be 01h on entry | ||
+ | Return: CF clear if successful | ||
+ | buffer filled (see INT 67/AH=3Fh function 1B00h) | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: this call always returns an error if Windows3 support has been disabled | ||
+ | with the NW3 switch to QEMM386.SYS | ||
+ | SeeAlso: INT 2F/ | ||
+ | |||
+ | ==== 4402h - U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE ==== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = file handle for device " | ||
+ | CX = 0004h | ||
+ | DS:DX -> DWORD buffer for address of hooked vector table (see below) | ||
+ | Return: CF clear if successful | ||
+ | DS:DX buffer filled | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | SeeAlso: AX=4402h" | ||
+ | |||
+ | Format of hooked vector table entry: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ==== 4402h - Advanced SCSI Programming Interface (ASPI) - INTERFACE ==== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = file handle for device " | ||
+ | CX = 0004h | ||
+ | DS:DX -> buffer for function address | ||
+ | Return: CF clear if successful | ||
+ | AX = 0004h | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: the function address is called with the address of a SCSI Request | ||
+ | Block on the stack and the caller must clean up the stack | ||
+ | SeeAlso: AX=440Ch" | ||
+ | |||
+ | Format of SCSI Request Block (64 bytes): | ||
+ | Offset Size Description | ||
+ | | ||
+ | 00h " | ||
+ | 01h " | ||
+ | 02h " | ||
+ | 03h " | ||
+ | 04h " | ||
+ | 05h " | ||
+ | | ||
+ | 00h not done yet | ||
+ | 02h aborted | ||
+ | 04h SCSI I/O error | ||
+ | 80h invalid | ||
+ | 81h no adapter | ||
+ | 82h no device attached | ||
+ | else status | ||
+ | | ||
+ | | ||
+ | bit 3: ??? | ||
+ | | ||
+ | ---request 00h--- | ||
+ | | ||
+ | | ||
+ | 0Ah 16 BYTEs (returned) manager ID | ||
+ | 1Ah 16 BYTEs (returned) adapter ID | ||
+ | 2Ah 16 BYTEs (returned) parameters | ||
+ | ---request 01h--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | 01h streamer | ||
+ | ---request 02h--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 11h select timeout | ||
+ | 12h data overrun | ||
+ | 13h bus error | ||
+ | 14h bus failure | ||
+ | | ||
+ | 02h sense data stored in SRB | ||
+ | 08h target busy | ||
+ | 18h reservation error | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 2Ah 22 BYTEs SCSIMGR$ workspace | ||
+ | | ||
+ | ---request 04h--- | ||
+ | | ||
+ | | ||
+ | 0Ah 14 BYTEs reserved | ||
+ | | ||
+ | | ||
+ | | ||
+ | 1Eh 34 BYTEs workspace | ||
+ | |||
+ | Format of CCB: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 01h rewind | ||
+ | 05h get block size limits | ||
+ | 08h read | ||
+ | 0Ah write | ||
+ | 10h write file marks | ||
+ | 11h SCSI Space (set position?) | ||
+ | 12h SCSI Inquire | ||
+ | 19h erase | ||
+ | 1Bh load/unload media | ||
+ | | ||
+ | | ||
+ | bits 7-5: logical unit number | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ... | ||
+ | | ||
+ | |||
+ | ==== 4402h - U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE ==== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = file handle for device " | ||
+ | CX = 005Ah | ||
+ | DS:DX -> 386MAX state buffer (see below) | ||
+ | Return: CF clear if successful | ||
+ | buffer filled | ||
+ | AX = number of bytes actually copied | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Notes: the buffer must be one byte larger than the value given in CX; if the | ||
+ | value is less than 5Ah, only a partial state record will be returned | ||
+ | the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 (" | ||
+ | did not exist yet, use " | ||
+ | 56h bytes for v5.11. | ||
+ | to invoke 386MAX API functions, push DX onto the stack, load DX with | ||
+ | the word at offset 25h in the returned state, load all other | ||
+ | registers as needed for the desired function, and execute an | ||
+ | OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return | ||
+ | if it is not otherwise modified by the API function. | ||
+ | SeeAlso: AX=4403h" | ||
+ | |||
+ | Format of 386MAX v6.01 state: | ||
+ | Offset Size Description | ||
+ | | ||
+ | v6.01 returns an error if not 03h) | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | bit 1: ??? | ||
+ | bit 2: ??? | ||
+ | bit 3: ??? (cleared by calling INT 67 functions) | ||
+ | bit 5: ??? | ||
+ | bit 6: 386MAX active??? | ||
+ | bit 7: 386MAX is providing EMS services | ||
+ | bit 8: ??? | ||
+ | bit 9: ??? (see INT 15/ | ||
+ | bit 10: ??? | ||
+ | bit 11: ??? | ||
+ | bit 12: ??? | ||
+ | bit 13: QPMS has been used | ||
+ | bit 14: ??? | ||
+ | bit 15: ??? | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | bit 1: ROM compressed??? | ||
+ | bit 3: ??? | ||
+ | bit 5: 386MAX loaded into high memory | ||
+ | bit 11: PC/XT (thus only single 8259 interrupt controller | ||
+ | present, | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | bit 2: no DPMI services | ||
+ | bit 11: don't backfill holes in video memory area | ||
+ | bit 12: don't backfill below video memory??? | ||
+ | | ||
+ | bit 7: ??? | ||
+ | | ||
+ | bit 0: Windows3 support enabled | ||
+ | bit 8: ??? | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | bit 12: ??? | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of high memory info record: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | 00h if locked out | ||
+ | 02h if EMS page frame | ||
+ | 04h if high RAM | ||
+ | 42h if ROM | ||
+ | | ||
+ | |||
+ | Format of ROM shadowing record: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Values for memory type: | ||
+ | 00h unused by EMS | ||
+ | 01h DOS | ||
+ | 04h page frame overlapping ROM??? | ||
+ | 80h high memory | ||
+ | 84h page frame??? | ||
+ | 87h video ROM??? | ||
+ | Note: the type may be 00h (unused) if the 16K page is split among different | ||
+ | uses (such as ROM and high RAM) | ||
+ | |||
+ | Call 386MAX API (via OUT DX,AL) with: | ||
+ | STACK: WORD value for DX | ||
+ | AH = 01h get high memory information | ||
+ | ES:DI -> buffer for array of high memory info records | ||
+ | (see above) | ||
+ | Return: CX = number of records placed in buffer | ||
+ | AH = 02h get shadowed ROM info??? | ||
+ | ES:DI -> buffer for array of ROM shadowing records (see above) | ||
+ | Return: CX = number of records placed in buffer | ||
+ | AH = 03h get 386MAX state | ||
+ | ES:DI -> 90-byte buffer for state (see above) | ||
+ | Return: AH = 00h (successful) | ||
+ | buffer filled | ||
+ | Note: | ||
+ | the first byte specifying the state buffer version | ||
+ | AH = 04h get memory types??? | ||
+ | ES:DI -> buffer for memory type info (array of bytes, one per | ||
+ | 16K page) (see above) | ||
+ | Return: | ||
+ | AH = 05h get ??? | ||
+ | AL = subfunction | ||
+ | 00h invoke INT 15/AX=2401h first | ||
+ | 01h don't invoke INT 15/AX=2401h first | ||
+ | CX = number of bytes to copy (0000h for default) | ||
+ | SI = ??? | ||
+ | ES:DI -> buffer for ??? | ||
+ | Return: CX = number of bytes actually copied | ||
+ | ??? | ||
+ | AH = 06h get memory speed info | ||
+ | ES:DI -> buffer for memory speed records (see below) | ||
+ | Return: AH = 00h (successful) | ||
+ | CX = number of bytes placed in buffer | ||
+ | Note: | ||
+ | AH = 07h ??? | ||
+ | ??? | ||
+ | Return: | ||
+ | AH = 08h ??? | ||
+ | AL = ??? (00h or nonzero) | ||
+ | AH = 09h toggle ??? flags | ||
+ | BX = bitmask of bits of ??? flags (word at state+11h) to toggle | ||
+ | Return: AH = 00h (successful) | ||
+ | Note: invokes INT 15/AX=2401h first | ||
+ | AH = 0Ah toggle ??? flags | ||
+ | BX = bitmask of bits of ??? (word at state+33h) to toggle | ||
+ | Return: AH = 00h (successful) | ||
+ | Notes: | ||
+ | does ??? if bit 3 on after specified bits are toggled | ||
+ | AH = 0Bh toggle ??? flags | ||
+ | BX = bitmask of bits of ??? (word at state+35h) to toggle | ||
+ | Return: AH = 00h (successful) | ||
+ | Note: invokes INT 15/AX=2401h first | ||
+ | AH = 0Ch toggle ??? flags | ||
+ | BX = bitmask of bits of ??? (word at state+41h) to toggle | ||
+ | Return: AH = 00h (successful) | ||
+ | Note: invokes INT 15/AX=2401h first | ||
+ | AH = 0Dh specify 386MAX high-memory location | ||
+ | BX = segment address of high-memory real-mode portion of 386MAX | ||
+ | ??? | ||
+ | Return: AH = status (00h successful) | ||
+ | ??? | ||
+ | AH = 0Eh CRT controller register virtualization | ||
+ | AL = subfunction | ||
+ | 00h allow access to CRTC I/O ports 03B4h/ | ||
+ | 01h trap accesses to CRTC I/O ports | ||
+ | AH = 0Fh reboot system | ||
+ | Return: never | ||
+ | AH = 11h get high memory information | ||
+ | ES:DI -> 96-byte buffer for high memory info | ||
+ | Return: AH = 00h (successful) | ||
+ | ES:DI buffer filled | ||
+ | Notes: | ||
+ | the A000h-FFFFh region | ||
+ | bit 0: ??? | ||
+ | bit 1: physical address same as linear address | ||
+ | bit 2: EMS page frame | ||
+ | bit 6: ??? | ||
+ | this function can take over a second to execute | ||
+ | AH = 12h ??? | ||
+ | AL = subfunction | ||
+ | 00h ??? | ||
+ | 01h ??? | ||
+ | ??? | ||
+ | Return: AH = 00h (successful) if AL=00h or 01h | ||
+ | AH = 8Fh otherwise | ||
+ | AH = 13h page protection??? | ||
+ | AL = subfunction | ||
+ | 00h set all ??? 4K pages to read-only??? | ||
+ | 01h set all ??? 4K pages to read-write??? | ||
+ | ??? | ||
+ | Return: AH = 00h (successful) if AL=00h or 01h | ||
+ | AH = 8Fh otherwise | ||
+ | AH = 15h ??? | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | AH = 16h get 386MAX memory usage screen | ||
+ | ES:DI -> buffer for memory info display | ||
+ | CX = size of buffer in bytes | ||
+ | Return: | ||
+ | large enough to hold entire usage screen) | ||
+ | AH = 17h Windows 3 startup/ | ||
+ | AL = subfunction | ||
+ | 00h Windows3 initializing | ||
+ | DX (on stack) = Windows startup flags | ||
+ | DI = Windows version number (major in upper byte) | ||
+ | ES:BX = 0000h:0000h | ||
+ | DS:SI = 0000h:0000h | ||
+ | Return: CX = 0000h if OK for Windows to load | ||
+ | <> | ||
+ | ES:BX -> startup info structure | ||
+ | DS:SI -> Virtual86 mode enable/ | ||
+ | 01h Windows3 terminating | ||
+ | ES:BX -> ??? | ||
+ | DX (on stack) = Windows exit flags | ||
+ | Return: ??? | ||
+ | AH = 18h QPMS (Qualitas Protected Memory Services) | ||
+ | AL = subfunction | ||
+ | 00h get QPMS configuration | ||
+ | Return: BX = starting segment of QPMS memory window | ||
+ | CX = number of 4K pages reserved for QPMS??? | ||
+ | DX = number of 4K pages in QPMS window??? | ||
+ | 01h map QPMS memory page??? | ||
+ | BX = 4K page number within memory reserved for QPMS??? | ||
+ | CL = 4K page number within QPMS memory window??? | ||
+ | 02h mark all QPMS memory read-only | ||
+ | 03h mark all QPMS memory read-write | ||
+ | Return: AH = status (00h, | ||
+ | AH = 19h get linear address for physical address | ||
+ | EDX = physical address (low word on stack) | ||
+ | Return: AH = status | ||
+ | 00h successful | ||
+ | EDX = linear address at which physical address | ||
+ | may be accessed | ||
+ | 8Bh physical address currently not addressable | ||
+ | Note: calls INT 15/AX=2401h first | ||
+ | AH = 1Ah set page table entry??? | ||
+ | EDX = new page table entry??? (low word on stack) | ||
+ | ESI = linear address of page??? | ||
+ | Return: AH = status (00h,8Bh) | ||
+ | Note: calls INT 15/AX=2401h first | ||
+ | AH = 1Bh get ??? | ||
+ | Return: AH = status | ||
+ | BX = ??? | ||
+ | CX = ??? | ||
+ | EDX = physical address of ??? | ||
+ | AH = 1Ch get original interrupt vector | ||
+ | AL = interrupt vector (00h-7Fh) | ||
+ | Return: AH = 00h (successful) | ||
+ | EDX = original vector before 386MAX loaded (segment in | ||
+ | high word, offset in low word) | ||
+ | Note: no range checking is performed; requests for INTs 80h- | ||
+ | FFh will return random values | ||
+ | AH = 1Dh display string??? | ||
+ | SI = ??? | ||
+ | Return: AH = 00h (successful) | ||
+ | ??? | ||
+ | AH = 1Eh ??? | ||
+ | ES:DI -> ??? | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | AH = 1Fh ??? | ||
+ | ??? | ||
+ | Return: AX = 0000h if successful | ||
+ | BX = ??? (0001h for 386MAX v6.01) | ||
+ | CL = ??? | ||
+ | DL = ??? (5Ah for 386MAX v6.01) | ||
+ | DH = ??? (00h for 386MAX v6.01) | ||
+ | SI = ??? | ||
+ | ES???:DI -> ??? | ||
+ | AH = 40h-5Dh EMS services (see INT 67/AH=40h etc) | ||
+ | AH = DEh VCPI services (see INT 67/AX=DE00h etc) | ||
+ | Return: AH = status (as for EMS INT 67 calls) | ||
+ | 00h successful | ||
+ | 80h internal error | ||
+ | 81h hardware malfunction | ||
+ | 83h invalid handle | ||
+ | 84h undefined function | ||
+ | 8Ah invalid logical page nuber | ||
+ | 8Bh illegal physical page number | ||
+ | 8Fh undefined subfunction | ||
+ | A4h access denied | ||
+ | etc. | ||
+ | STACK popped (value placed in DX if no specific return value for DX) | ||
+ | |||
+ | Format of memory speed record: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ==== 4402h - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO ==== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = file handle for device " | ||
+ | CX = 0018h (size of buffer) | ||
+ | DS:DX -> configuration buffer (see below) | ||
+ | Return: CF clear if successful | ||
+ | buffer filled | ||
+ | AX = number of bytes actually copied | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: | ||
+ | display adapter, which provides a 1600x1200 monochrome display as | ||
+ | well as one of two emulations, MDA or CGA. | ||
+ | SeeAlso: AX=4403h" | ||
+ | |||
+ | Format of configuration information: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 03B0h MDA emulation | ||
+ | 0390h no emulation | ||
+ | 0350h no emulation, alternate | ||
+ | | ||
+ | | ||
+ | B000h | ||
+ | 0000h | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ==== 4402h - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER ==== | ||
+ | |||
+ | AX = 4402h | ||
+ | BX = file handle referencing device " | ||
+ | CX, DS:DX ignored | ||
+ | Return: CF clear if successful | ||
+ | AX destroyed | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: there are a total of 378h bytes of configuration data for IPCUST.SYS | ||
+ | version 2.05. If less than the entire data is read or written, | ||
+ | the next read/write continues where the previous one ended; this | ||
+ | call and AX=4403h both reset the location at which the next | ||
+ | operation starts to zero | ||
+ | SeeAlso: AH=3Fh" | ||
+ | ----------214403----------------------------- | ||
+ | INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL | ||
+ | AX = 4403h | ||
+ | BX = file handle referencing character device | ||
+ | CX = number of bytes to write | ||
+ | DS:DX -> data to write | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually written | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Notes: | ||
+ | if the file handle refers to " | ||
+ | KEYSTACK.SYS driver will push the specified characters on the | ||
+ | keyboard stack; similarly for " | ||
+ | driver will push the characters onto the keyboard stack | ||
+ | SeeAlso: AX=4400h, | ||
+ | SeeAlso: INT 2F/AX=D44Fh | ||
+ | ----------214403----------------------------- | ||
+ | INT 21 - SMARTDRV.SYS - IOCTL - CACHE CONTROL | ||
+ | AX = 4403h | ||
+ | BX = handle for device " | ||
+ | CX = number of bytes to write | ||
+ | DS:DX -> SMARTDRV control block (see below) | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually written | ||
+ | = 0000h if control block too small for given command | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | SeeAlso: AX=4402h" | ||
+ | |||
+ | Format of SMARTDRV control block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 00h flush cache | ||
+ | 01h flush and discard cache | ||
+ | 02h disable caching (flushes and discards cache first) | ||
+ | 03h enable caching | ||
+ | 04h control write caching | ||
+ | 05h set flushing tick count | ||
+ | 06h lock cache contents | ||
+ | 07h unlock cache contents | ||
+ | 08h set flush-on-reboot flag | ||
+ | 09h unused | ||
+ | 0Ah control full-track caching | ||
+ | 0Bh reduce cache size | ||
+ | 0Ch increase cache size | ||
+ | 0Dh set INT 13 chain address | ||
+ | ---function 04h--- | ||
+ | | ||
+ | 00h turn off write-through | ||
+ | 01h turn on write-through | ||
+ | 02h turn off write buffering (also flushes cache) | ||
+ | 03h turn on write buffering (also flushes cache) | ||
+ | ---function 05h--- | ||
+ | | ||
+ | ---function 08h--- | ||
+ | | ||
+ | ---function 0Ah--- | ||
+ | | ||
+ | 00h not cached | ||
+ | 01h cached | ||
+ | ---functions 0Bh,0Ch--- | ||
+ | | ||
+ | ---function 0Dh--- | ||
+ | | ||
+ | Note: the previous address is not preserved | ||
+ | ----------214403----------------------------- | ||
+ | INT 21 - CD-ROM device driver - IOCTL OUTPUT | ||
+ | AX = 4403h | ||
+ | BX = file handle referencing character device for CD-ROM driver | ||
+ | CX = number of bytes to write | ||
+ | DS:DX -> control block (see below) | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually written | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | SeeAlso: AX=4402h" | ||
+ | |||
+ | Format of control block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 00h eject disk | ||
+ | 01h lock/unlock door | ||
+ | 02h reset drive | ||
+ | 03h control audio channel | ||
+ | 04h write device control string | ||
+ | 05h close tray | ||
+ | ---functions 00h, | ||
+ | no further fields | ||
+ | ---function 01h--- | ||
+ | | ||
+ | 00h unlock door | ||
+ | 01h lock door | ||
+ | ---function 03h--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Note: | ||
+ | right prime; a volume of 00h is off | ||
+ | ---function 04h--- | ||
+ | | ||
+ | interpretation | ||
+ | ----------214403----------------------------- | ||
+ | INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS | ||
+ | AX = 4403h | ||
+ | BX = handle for device " | ||
+ | CX = number of bytes to write | ||
+ | DS:DX -> SCSITAPE control block (see below) | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually written | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | SeeAlso: AX=4405h" | ||
+ | |||
+ | Format of SCSITAPE control block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------214403----------------------------- | ||
+ | INT 21 U - AI Architects - OS/x86??? - API | ||
+ | AX = 4403h | ||
+ | BX = handle for device " | ||
+ | CX = number of bytes to write (ignored) | ||
+ | DS:DX -> 12-byte buffer, first byte is command: | ||
+ | 81h installation check | ||
+ | 82h get API entry point | ||
+ | 84h uninstall | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually written | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Notes: | ||
+ | device driver in CONFIG.SYS | ||
+ | called by TKERNEL (a licensed version of AI Architects/ | ||
+ | SeeAlso: INT 2F/ | ||
+ | |||
+ | Format of buffer on return: | ||
+ | Offset Size Description | ||
+ | | ||
+ | ---if func 81h--- | ||
+ | (no additional fields) | ||
+ | ---if func 82h--- | ||
+ | | ||
+ | ---if func 84h--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------214403----------------------------- | ||
+ | INT 21 U - Qualitas 386MAX v6.01 - SET STATE | ||
+ | AX = 4403h | ||
+ | BX = handle for device " | ||
+ | CX = number of bytes to copy (up to 5Ah) | ||
+ | DS:DX -> 386MAX state buffer (see AX=4402h" | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually written | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: the first byte of the buffer must be either 01h, 02h, or 03h | ||
+ | (specifying the version of the state record) and the buffer must | ||
+ | contain CX bytes AFTER the initial byte | ||
+ | SeeAlso: AX=4402h" | ||
+ | ----------214403----------------------------- | ||
+ | INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION??? | ||
+ | AX = 4403h | ||
+ | BX = file handle for device " | ||
+ | CX = 0018h (size of buffer) | ||
+ | DS:DX -> configuration buffer (see AX=4402h" | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually written | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: | ||
+ | display adapter, which provides a 1600x1200 monochrome display as | ||
+ | well as one of two emulations, MDA or CGA. | ||
+ | SeeAlso: AX=4402h" | ||
+ | ----------214403----------------------------- | ||
+ | INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER | ||
+ | AX = 4403h | ||
+ | BX = file handle referencing device " | ||
+ | CX, DS:DX ignored | ||
+ | Return: CF clear if successful | ||
+ | AX destroyed | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: there are a total of 378h bytes of configuration data for IPCUST.SYS | ||
+ | version 2.05. If less than the entire data is read or written, | ||
+ | the next read/write continues where the previous one ended; this | ||
+ | call and AX=4402h both reset the location at which the next | ||
+ | operation starts to zero | ||
+ | SeeAlso: AH=3Fh" | ||
+ | ----------214404----------------------------- | ||
+ | INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL | ||
+ | AX = 4404h | ||
+ | BL = drive number (00h = default, 01h = A:, etc) | ||
+ | CX = number of bytes to read | ||
+ | DS:DX -> buffer | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually read | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: | ||
+ | SeeAlso: AX=4402h, | ||
+ | ----------214404----------------------------- | ||
+ | INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER | ||
+ | AX = 4404h | ||
+ | BL = drive number (00h = default, 01h = A:, etc) | ||
+ | CX = 0004h | ||
+ | DS:DX -> DWORD buffer to receive device driver address | ||
+ | Note: In addition to returning the address of the Stacker device driver, | ||
+ | this call also sets the volume number at offset 3Eh in the device | ||
+ | driver (see INT 25/ | ||
+ | SeeAlso: INT 25/AX=CDCDh | ||
+ | ----------214404----------------------------- | ||
+ | INT 21 - Stacker - GET STACVOL FILE SECTORS | ||
+ | AX = 4404h | ||
+ | BL = drive number (0 is current drive) | ||
+ | CX = byte count (i.e., 200h = 1 sector) | ||
+ | DS:DX -> buffer (see below) | ||
+ | Return: | ||
+ | STACVOL physical file for the drive specified. | ||
+ | |||
+ | Format of stacker buffer: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------214405----------------------------- | ||
+ | INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL | ||
+ | AX = 4405h | ||
+ | BL = drive number (00h = default, 01h = A:, etc) | ||
+ | CX = number of bytes to write | ||
+ | DS:DX -> data to write | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually written | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: | ||
+ | SeeAlso: AX=4403h, | ||
+ | ----------214405----------------------------- | ||
+ | INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS | ||
+ | AX = 4405h | ||
+ | BX = drive number (00h = default, 01h = A:, etc) | ||
+ | CX = number of bytes to write | ||
+ | DS:DX -> SCSIDISK control block (see AX=4403h" | ||
+ | Return: CF clear if successful | ||
+ | AX = number of bytes actually written | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | SeeAlso: AX=4403h" | ||
+ | ----------214406----------------------------- | ||
+ | INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS | ||
+ | AX = 4406h | ||
+ | BX = file handle | ||
+ | Return: CF clear if successful | ||
+ | AL = input status | ||
+ | 00h not ready (device) or at EOF (file) | ||
+ | FFh ready | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: files may not register as being at EOF if positioned there by AH=42h | ||
+ | SeeAlso: AX=4407h, | ||
+ | ----------214407----------------------------- | ||
+ | INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS | ||
+ | AX = 4407h | ||
+ | BX = file handle | ||
+ | Return: CF clear if successful | ||
+ | AL = input status | ||
+ | 00h not ready | ||
+ | FFh ready | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: for DOS 2+, files are always ready for output, even if the disk is | ||
+ | full or no media is in the drive | ||
+ | SeeAlso: AX=4406h, | ||
+ | ----------214408----------------------------- | ||
+ | INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE | ||
+ | AX = 4408h | ||
+ | BL = drive number (00h = default, 01h = A:, etc) | ||
+ | Return: CF clear if successful | ||
+ | AX = 0000h if removable | ||
+ | = 0001h if fixed | ||
+ | CF set on error | ||
+ | AX = error code (01h,0Fh) (see AH=59h) | ||
+ | SeeAlso: AX=4400h, | ||
+ | ----------214409----------------------------- | ||
+ | INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE | ||
+ | AX = 4409h | ||
+ | BL = drive number (00h = default, 01h = A:, etc) | ||
+ | Return: CF clear if successful | ||
+ | DX = device attribute word | ||
+ | bit 15: drive is SUBSTituted | ||
+ | bit 12: drive is remote | ||
+ | bit 9: direct I/O not allowed | ||
+ | CF set on error | ||
+ | AX = error code (01h,0Fh) (see AH=59h) | ||
+ | Note: on local drives, DX bits not listed above are the attribute word from | ||
+ | the device driver header (see AH=52h); for remote drives, the other | ||
+ | bits appear to be undefined | ||
+ | SeeAlso: AX=4400h, | ||
+ | ----------21440A----------------------------- | ||
+ | INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE | ||
+ | AX = 440Ah | ||
+ | BX = handle | ||
+ | Return: CF clear if successful | ||
+ | DX = attribute word (as stored in SFT) | ||
+ | bit 15: set if remote | ||
+ | bit 14: date/time not set on close | ||
+ | CF set on error | ||
+ | AX = error code (01h,06h) (see AH=59h) | ||
+ | Note: if file is remote, Novell Advanced NetWare 2.0 returns the number of | ||
+ | the file server on which the handle is located in CX | ||
+ | SeeAlso: AX=4400h, | ||
+ | ----------21440B----------------------------- | ||
+ | INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT | ||
+ | AX = 440Bh | ||
+ | CX = pause between retries (default 1) | ||
+ | DX = number of retries (default 3) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (01h) (see AH=59h) | ||
+ | Notes: | ||
+ | 64K-iteration empty loops to execute) | ||
+ | if DX=0000h on entry, the retry count is left unchanged | ||
+ | SeeAlso: AH=52h,INT 2F/ | ||
+ | ----------21440C----------------------------- | ||
+ | INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST | ||
+ | AX = 440Ch | ||
+ | BX = device handle | ||
+ | CH = category code | ||
+ | 00h unknown (DOS 3.3+) | ||
+ | 01h COMn: (DOS 3.3+) | ||
+ | 03h CON (DOS 3.3+) | ||
+ | 05h LPTn: | ||
+ | 9Eh Media Access Control driver (STARLITE) | ||
+ | CL = function | ||
+ | 00h MAC driver Bind (STARLITE) | ||
+ | 45h set iteration count | ||
+ | 4Ah select code page | ||
+ | 4Ch start code-page preparation | ||
+ | 4Dh end code-page preparation | ||
+ | 5Fh set display information (DOS 4.0) | ||
+ | 65h get iteration count | ||
+ | 6Ah query selected code page | ||
+ | 6Bh query prepare list | ||
+ | 7Fh get display information (DOS 4.0) | ||
+ | DS:DX -> (DOS) parameter block (see below) | ||
+ | SI:DI -> (OS/2 comp box) parameter block (see below) | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | DS:DX -> iteration count if CL=65h | ||
+ | DS:DX -> (OS/2 comp box) data block | ||
+ | SeeAlso: AX=440Dh, | ||
+ | |||
+ | Format of parameter block for function 00h: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | bit 0: media requires connect or listen request before use | ||
+ | bit 1: network is a LAN (broadcast/ | ||
+ | bit 2: point-to-point network | ||
+ | | ||
+ | by MAC driver) | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 0000h general addressing | ||
+ | 0001h Ethernet addressing | ||
+ | 0002h Token Ring addressing | ||
+ | 0003h Token Bus addressing | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of parameter block for function 45h: | ||
+ | Offset Size Description | ||
+ | | ||
+ | device is busy | ||
+ | |||
+ | Format of parameter block for functions 4Ah and 6Ah: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | 04h 2N BYTEs DCBS (double byte character set) lead byte range | ||
+ | start/end for each of N ranges (DOS 4.0) | ||
+ | WORD 0000h | ||
+ | |||
+ | Format of parameter block for function 4Dh: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of parameter block for function 4Ch: | ||
+ | Offset Size Description | ||
+ | | ||
+ | DISPLAY.SYS = 0000h | ||
+ | PRINTER.SYS bit 0 clear to prepare downloaded font, set to | ||
+ | prepare cartridge selection | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of parameter block for functions 5Fh and 7Fh: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | bit 0 set for blink, clear for intensity | ||
+ | bits 1 to 15 reserved | ||
+ | | ||
+ | | ||
+ | | ||
+ | 0 = monochrome | ||
+ | else N bits per pixel | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of parameter block for function 6Bh: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | WORD number of prepared code pages | ||
+ | N WORDs prepared code pages 1,...,N | ||
+ | ----------21440C----------------------------- | ||
+ | INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE | ||
+ | AX = 440Ch | ||
+ | BX = device handle | ||
+ | CH = category code | ||
+ | 07h tape (ASPITAPE.SYS) | ||
+ | CL = function | ||
+ | 01h " | ||
+ | 02h " | ||
+ | 03h ignore end-of-tape errors | ||
+ | 04h enable end-of-tape errors | ||
+ | DS:DX -> parameter block (see below) | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | DS:DX -> data block | ||
+ | Notes: This device driver is a simple DOS interface to the Adaptec Advanced | ||
+ | SCSI Programming Interface (ASPI). | ||
+ | names as access to the SCSI tape, ' | ||
+ | ' | ||
+ | also be the following names ' | ||
+ | byte blocks. The names may also have a ' | ||
+ | them unique from file names of ' | ||
+ | once opend these devices must be put into RAW mode | ||
+ | SeeAlso: AX=4402h" | ||
+ | |||
+ | Format of mtop parameter block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 00h " | ||
+ | 01h " | ||
+ | 02h " | ||
+ | 03h " | ||
+ | 04h " | ||
+ | 05h " | ||
+ | 06h " | ||
+ | 07h " | ||
+ | | ||
+ | |||
+ | Format of mtget parameter block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | bit 0: drive must use fixed-block read and write | ||
+ | bit 7: drive is an ASPI device | ||
+ | | ||
+ | bit 0: device currently opened in buffered mode | ||
+ | bit 1: drive currently opened in nonbuffered mode | ||
+ | bit 2: rewind drive on last close | ||
+ | bit 3: drive has been written on | ||
+ | bit 4: drive has been read from | ||
+ | bit 5: next read will return 0 bytes | ||
+ | bit 6: EOM will resemble EOF | ||
+ | bit 7: drive may be busy rewinding | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | bits 0-7: SCSI operation (SCSI packet byte 0) | ||
+ | bits 8-10: SCSI flags (SCSI packet byte 1) | ||
+ | bits 11-12: ASPI " | ||
+ | | ||
+ | ----------21440D----------------------------- | ||
+ | INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST | ||
+ | AX = 440Dh | ||
+ | BL = drive number (00h=default, | ||
+ | CH = category code | ||
+ | 08h disk drive | ||
+ | CL = function | ||
+ | 40h set device parameters | ||
+ | 41h write logical device track | ||
+ | 42h format and verify logical device track | ||
+ | 46h (DOS 4+) set volume serial number (see also AH=69h) | ||
+ | 47h (DOS 4+) set access flag | ||
+ | 60h get device parameters | ||
+ | 61h read logical device track | ||
+ | 62h verify logical device track | ||
+ | 66h (DOS 4+) get volume serial number (see also AH=69h) | ||
+ | 67h (DOS 4+) get access flag | ||
+ | 68h (DOS 5+) sense media type | ||
+ | DS:DX -> (DOS) parameter block (see below) | ||
+ | SI:DI -> (OS/2 comp box) parameter block (see below) | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | DS:DX -> data block if CL=60h or CL=61h | ||
+ | Notes: DOS 4.01 seems to ignore the high byte of the number of directory | ||
+ | entries in the BPB for diskettes. | ||
+ | functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5.0 | ||
+ | SeeAlso: AX=440Ch, | ||
+ | |||
+ | Format of parameter block for functions 40h, 60h: | ||
+ | Offset Size Description | ||
+ | | ||
+ | bit 0 set if function to use current BPB, clear if Device | ||
+ | BIOS Parameter Block field contains new default BPB | ||
+ | bit 1 set if function to use track layout fields only | ||
+ | must be clear if CL=60h | ||
+ | bit 2 set if all sectors in track same size (should be set) | ||
+ | bits 3-7 reserved | ||
+ | | ||
+ | 00h 320K/360K disk | ||
+ | 01h 1.2M disk | ||
+ | 02h 720K disk | ||
+ | 03h single-density 8-inch disk | ||
+ | 04h double-density 8-inch disk | ||
+ | 05h fixed disk | ||
+ | 06h tape drive | ||
+ | 07h (DOS 3.3+) 1.44M floppy | ||
+ | 08h read/write optical disk | ||
+ | 09h (DOS 5.0) 2.88M floppy | ||
+ | 0Ah other type of block device | ||
+ | | ||
+ | bit 0 set if nonremovable medium | ||
+ | bit 1 set if door lock supported | ||
+ | bits 2-15 reserved | ||
+ | | ||
+ | | ||
+ | for 1.2M drive | ||
+ | 00h 1.2M disk (default) | ||
+ | 01h 320K/360K disk | ||
+ | always 00h for other drive types | ||
+ | 07h 31 BYTEs device BPB (see AH=53h), bytes after BPB offset 1Eh omitted | ||
+ | | ||
+ | not used by function 60h | ||
+ | | ||
+ | |||
+ | Format of parameter block for functions 41h, 61h: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of parameter block for functions 42h, 62h: | ||
+ | Offset Size Description | ||
+ | | ||
+ | bit 0=0: format/ | ||
+ | 1: format status call (DOS 3.2+) | ||
+ | bits 1-7 reserved, must be zero | ||
+ | on return (DOS 4.x): | ||
+ | bit 0: set if specified tracks, sectors/ | ||
+ | bit 1: set if function not supported by BIOS | ||
+ | bit 2: set if specified tracks, sectors/ | ||
+ | bit 3: set if no disk in drive | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of parameter block for functions 46h, 66h: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | 06h 11 BYTEs volume label or "NO NAME " | ||
+ | | ||
+ | |||
+ | Format of parameter block for functions 47h, 67h: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of parameter block for function 68h: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | ----------21440E----------------------------- | ||
+ | INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP | ||
+ | AX = 440Eh | ||
+ | BL = drive number (00h=default, | ||
+ | Return: CF set on error | ||
+ | AX = error code (01h,0Fh) (see AH=59h) | ||
+ | CF clear if successful | ||
+ | AL = 00h block device has only one logical drive assigned | ||
+ | 1..26 the last letter used to reference the drive (1=A:,etc) | ||
+ | SeeAlso: AX=440Fh, | ||
+ | ----------21440F----------------------------- | ||
+ | INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP | ||
+ | AX = 440Fh | ||
+ | BL = physical drive number (00h=default, | ||
+ | Return: CF set on error | ||
+ | AX = error code (01h,0Fh) (see AH=59h) | ||
+ | CF clear if successful | ||
+ | drive now responds to next logical drive number | ||
+ | Note: maps logical drives to physical drives, similar to DOS's treatment of | ||
+ | a single physical floppy drive as both A: and B: | ||
+ | SeeAlso: AX=440Eh, | ||
+ | ----------214410----------------------------- | ||
+ | INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE) | ||
+ | AX = 4410h | ||
+ | BX = handle for device | ||
+ | CH = category code (see AX=440Ch) | ||
+ | CL = function code | ||
+ | Return: CF clear if successful | ||
+ | AX = 0000h specified IOCTL function is supported | ||
+ | CF set on error | ||
+ | AL = 01h IOCTL capability not available | ||
+ | Note: a program which wishes to use Generic IOCTL calls beyond those in the | ||
+ | standard DOS 3.2 set may use this call first to see whether a | ||
+ | particular call is supported | ||
+ | SeeAlso: AX=440Ch, | ||
+ | ----------214410BXFFFF----------------------- | ||
+ | INT 21 U - NewSpace - ENABLE DRIVER | ||
+ | AX = 4410h | ||
+ | BX = FFFFh | ||
+ | Notes: | ||
+ | all files as they are written and decompresses them as they are read | ||
+ | compressed files are not accessible unless the driver is enabled | ||
+ | SeeAlso: AX=4411h/ | ||
+ | ----------214411----------------------------- | ||
+ | INT 21 - DOS 5.0 - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE) | ||
+ | AX = 4411h | ||
+ | BL = drive number | ||
+ | CH = category code (see AX=440Dh) | ||
+ | CL = function code | ||
+ | Return: CF clear if successful | ||
+ | AX = 0000h specified IOCTL function is supported | ||
+ | CF set on error | ||
+ | AL = 01h IOCTL capability not available | ||
+ | Note: a program which wishes to use Generic IOCTL calls beyond those in the | ||
+ | standard DOS 3.2 set may use this call first to see whether a | ||
+ | particular call is supported | ||
+ | SeeAlso: AX=440Ch, | ||
+ | ----------214411BXFFFF----------------------- | ||
+ | INT 21 U - NewSpace - DISABLE DRIVER | ||
+ | AX = 4411h | ||
+ | BX = FFFFh | ||
+ | Notes: | ||
+ | all files as they are written and decompresses them as they are read | ||
+ | compressed files are not accessible unless the driver is enabled | ||
+ | SeeAlso: AX=4410h/ | ||
+ | ----------214412----------------------------- | ||
+ | INT 21 - DR-DOS 5.0 - DETERMINE DOS TYPE | ||
+ | AX = 4412h | ||
+ | CF set | ||
+ | Return: CF set if not DR DOS | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if DR DOS | ||
+ | DX = AX = version code | ||
+ | 1060h = ??? | ||
+ | 1063h = DR-DOS 3.41 ??? | ||
+ | 1065h = DR-DOS 5.0 | ||
+ | 1067h = DR-DOS 6.0 | ||
+ | Note: this call is identical to AX=4452h | ||
+ | SeeAlso: AX=4452h | ||
+ | ----------214412BXFFFF----------------------- | ||
+ | INT 21 U - NewSpace - INSTALLATION CHECK??? | ||
+ | AX = 4412h | ||
+ | BX = FFFFh | ||
+ | Return: AX = PSP segment of NewRes (resident driver for NewSpace) | ||
+ | BX:DX -> ??? | ||
+ | CX = ??? | ||
+ | SeeAlso: AX=4411h/ | ||
+ | ----------214413BXFFFF----------------------- | ||
+ | INT 21 U - NewSpace - GET ??? | ||
+ | AX = 4413h | ||
+ | BX = FFFFh | ||
+ | Return: AX = code segment of NewRes (resident driver for NewSpace) | ||
+ | BX = offset of ??? | ||
+ | SeeAlso: AX=4412h/ | ||
+ | ----------214414----------------------------- | ||
+ | INT 21 U - DR-DOS 5.0 - SET GLOBAL PASSWORD | ||
+ | AX = 4414h | ||
+ | DS:DX -> password string (blank-padded to 8 characters) | ||
+ | Desc: | ||
+ | Note: this call is identical to AX=4454h | ||
+ | SeeAlso: AX=4454h | ||
+ | ----------214414BXFFFF----------------------- | ||
+ | INT 21 U - NewSpace - DEBUGGING DUMP | ||
+ | AX = 4414h | ||
+ | BX = FFFFh | ||
+ | Return: | ||
+ | SeeAlso: AX=4413h/ | ||
+ | ----------2144------------------------------- | ||
+ | INT 21 U - DR-DOS 5.0 | ||
+ | AH = 44h | ||
+ | AL = 16h to 18h | ||
+ | Note: these subfunctions are identical to AX=4456h to 4458h | ||
+ | SeeAlso: AX=4456h, | ||
+ | ----------214451----------------------------- | ||
+ | INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK | ||
+ | AX = 4451h | ||
+ | Return: CF set if not Concurrent DOS | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | AH = 14h | ||
+ | AL = version (high nybble = major version, low nybble = minor ver) | ||
+ | SeeAlso: AX=4452h, | ||
+ | ----------214452----------------------------- | ||
+ | INT 21 - DR DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION | ||
+ | AX = 4452h | ||
+ | CF set | ||
+ | Return: CF set if not DR DOS | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if DR DOS | ||
+ | DX = AX = version code | ||
+ | 1060h = ??? | ||
+ | 1063h = DR-DOS 3.41 ??? | ||
+ | 1065h = DR-DOS 5.0 | ||
+ | 1067h = DR-DOS 6.0 | ||
+ | Notes: the DR-DOS version is stored in the environment variable VER | ||
+ | SeeAlso: AX=4412h, | ||
+ | ----------214454----------------------------- | ||
+ | INT 21 U - DR-DOS 3.41+ - SET GLOBAL PASSWORD | ||
+ | AX = 4454h | ||
+ | DS:DX -> password string (blank-padded to 8 characters) | ||
+ | Desc: | ||
+ | SeeAlso: AX=4303h, | ||
+ | ----------214456----------------------------- | ||
+ | INT 21 U - DR-DOS 5.0+ - ??? | ||
+ | AX = 4456h | ||
+ | DL = flag | ||
+ | bit 0: ??? | ||
+ | Return: AL = ??? | ||
+ | Note: This was seen called by COMMAND.COM of DR-DOS 6.0 | ||
+ | ----------214457----------------------------- | ||
+ | INT 21 U - DR-DOS 5.0+ - ??? | ||
+ | AX = 4457h | ||
+ | DH = subfunction | ||
+ | 00h ??? | ||
+ | DL = 00h ??? | ||
+ | = 01h ??? | ||
+ | else Return: AX = ??? | ||
+ | 01h | ||
+ | | ||
+ | 02h | ||
+ | DL = ??? | ||
+ | Return: AX = ??? | ||
+ | other | ||
+ | | ||
+ | Note: This was seen called by COMMAND.COM of DR-DOS 6.0 | ||
+ | ----------214458----------------------------- | ||
+ | INT 21 U - DR DOS 5.0+ internal - GET POINTER TO TABLE OF ??? | ||
+ | AX = 4458h | ||
+ | Return: ES:BX -> internal table (see below) | ||
+ | AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0) | ||
+ | SeeAlso: AX=4452h | ||
+ | |||
+ | Format of internal table: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | or 0000h if already used (DR-DOS 6.0 only) | ||
+ | | ||
+ | Note: the segment used for the DR-DOS 6.0 CONFIG environment variables | ||
+ | (excluding COMSPEC, VER and OS) is only useful for programs/ | ||
+ | called from CONFIG.SYS. The word is set to zero later and the area | ||
+ | lost. | ||
+ | |||
+ | Format of jump table for DR-DOS 5.0-6.0: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------214459----------------------------- | ||
+ | INT 21 - DR MultiUser DOS 5.0 - API | ||
+ | AX = 4459h | ||
+ | CL = function (see INT E0" | ||
+ | DS,DX = parameters | ||
+ | Notes: | ||
+ | this API is also available on INT E0 | ||
+ | SeeAlso: AX=4452h, | ||
+ | ----------2144FFBXFFFF----------------------- | ||
+ | INT 21 U - NewSpace - ??? | ||
+ | AX = 44FFh | ||
+ | BX = FFFFh | ||
+ | DX = ??? | ||
+ | Note: | ||
+ | all files as they are written and decompresses them as they are read | ||
+ | SeeAlso: AX=4414h/ | ||
+ | |||
+ | ===== 45h - DOS 2+ - " | ||
+ | < | ||
+ | AH = 45h | ||
+ | BX = file handle | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX = new handle | ||
+ | CF set on error | ||
+ | AX = error code (04h,06h) (see AH=59h) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | moving file pointer for either handle will also move it for the other, because both will refer to the same system file table | ||
+ | |||
+ | for DOS versions prior to 3.3, file writes may be forced to disk by duplicating the file handle and closing the duplicate | ||
+ | </ | ||
+ | SeeAlso: AH=3Dh, | ||
+ | |||
+ | ===== 46h - DOS 2+ - " | ||
+ | < | ||
+ | AH = 46h | ||
+ | BX = file handle | ||
+ | CX = file handle to become duplicate of first handle | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (04h,06h) (see AH=59h) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | closes file with handle CX if it is still open | ||
+ | |||
+ | DOS 3.30 hangs if BX=CX on entry | ||
+ | |||
+ | moving file pointer for either handle will also move it for the other, because both will refer to the same system file table | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=3Dh, | ||
+ | |||
+ | ===== 47h - DOS 2+ - " | ||
+ | < | ||
+ | AH = 47h | ||
+ | DL = drive number (00h = default, 01h = A:, etc) | ||
+ | DS:SI -> 64-byte buffer for ASCIZ pathname | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX = 0100h (undocumented) | ||
+ | CF set on error | ||
+ | AX = error code (0Fh) (see AH=59h) | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | the returned path does not include a drive or the initial backslash | ||
+ | |||
+ | many Microsoft products for Windows rely on AX being 0100h on success | ||
+ | </ | ||
+ | SeeAlso: AH=19h, | ||
+ | |||
+ | ===== 48h - DOS 2+ - ALLOCATE MEMORY ===== | ||
+ | |||
+ | < | ||
+ | AH = 48h | ||
+ | BX = number of paragraphs to allocate | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX = segment of allocated block | ||
+ | CF set on error | ||
+ | AX = error code (07h,08h) (see AH=59h) | ||
+ | BX = size of largest available block | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | DOS 2.1-5.0 coalesces free blocks while scanning for a block to allocate | ||
+ | |||
+ | .COM programs are initially allocated the largest available memory block, and should free some memory with AH=49h before attempting any allocations | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=49h, | ||
+ | |||
+ | ===== 49h - DOS 2+ - FREE MEMORY ===== | ||
+ | < | ||
+ | AH = 49h | ||
+ | ES = segment of block to free | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (07h,09h) (see AH=59h) | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | apparently never returns an error 07h, despite official docs; DOS 3.30 code contains only an error 09h exit | ||
+ | |||
+ | DOS 2.1-5.0 does not coalesce adjacent free blocks when a block is freed, only when a block is allocated or resized | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=48h, | ||
+ | |||
+ | ===== 4Ah - DOS 2+ - RESIZE MEMORY BLOCK ===== | ||
+ | |||
+ | < | ||
+ | AH = 4Ah | ||
+ | BX = new size in paragraphs | ||
+ | ES = segment of block to resize | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (07h, | ||
+ | BX = maximum paragraphs available for specified memory block | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | under DOS 2.1-5.0, if there is insufficient memory to expand the block as much as requested, the block will be made as large as possible | ||
+ | |||
+ | DOS 2.1-5.0 coalesces any free blocks immediately following the block to be resized | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=48h, | ||
+ | |||
+ | ===== 4Bh ===== | ||
+ | |||
+ | ==== 4Bh - DOS 2+ - " | ||
+ | < | ||
+ | AH = 4Bh | ||
+ | AL = type of load | ||
+ | 00h load and execute | ||
+ | 01h load but do not execute | ||
+ | 03h load overlay | ||
+ | 04h load and execute in background (European MSDOS 4.0 only) | ||
+ | (see also AH=80h) | ||
+ | DS:DX -> ASCIZ program name (must include extension) | ||
+ | ES:BX -> parameter block (see below) | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | BX,DX destroyed | ||
+ | if subfunction 01h, process ID set to new program' | ||
+ | INT 21/AH=62h | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | DOS 2.x destroys all registers, including SS:SP | ||
+ | |||
+ | for functions 00h and 01h, the calling process must ensure that there is enough unallocated memory available; if necessary, by releasing memory with AH=49h or AH=4Ah | ||
+ | |||
+ | for function 01h, the value to be passed to the child program is put on top of the child' | ||
+ | |||
+ | for function 03h, DOS assumes that the overlay is being loaded into memory allocated by the caller | ||
+ | |||
+ | function 01h has been documented for DOS 5+, but was undocumented in prior versions | ||
+ | |||
+ | some versions (such as DR-DOS 6.0) check the parameters and parameter block and return an error if an invalid value (such as an offset of FFFFh) is found | ||
+ | |||
+ | BUG: DOS 2.00 assumes that DS points at the current program' | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4B05h, | ||
+ | |||
+ | |||
+ | === Structures format === | ||
+ | |||
+ | == Format of EXEC parameter block for AL=00h, | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | WORD | segment of environment to copy for child process (copy caller' | ||
+ | | 02h | DWORD | pointer to command tail to be copied into child' | ||
+ | | 06h | DWORD | pointer to first FCB to be copied into child' | ||
+ | | 0Ah | DWORD | pointer to second FCB to be copied into child' | ||
+ | | 0Eh | DWORD | (AL=01h) will hold subprogram' | ||
+ | | 12h | DWORD | (AL=01h) will hold entry point (CS:IP) on return | ||
+ | |||
+ | == Format of EXEC parameter block for AL=03h: == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | WORD | segment at which to load overlay | ||
+ | | 02h | WORD | relocation factor to apply to overlay if in .EXE format | ||
+ | |||
+ | == Format of .EXE file header: == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | 2 BYTEs | .EXE signature, either " | ||
+ | | 02h | WORD | number of bytes in last 512-byte page of executable | ||
+ | | 04h | WORD | total number of 512-byte pages in executable (includes any partial last page) | | ||
+ | | 06h | WORD | number of relocation entries | ||
+ | | 08h | WORD | header size in paragraphs | ||
+ | | 0Ah | WORD | minimum paragraphs of memory to allocation in addition to executable' | ||
+ | | 0Ch | WORD | maximum paragraphs to allocate in addition to executable' | ||
+ | | 0Eh | WORD | initial SS relative to start of executable | ||
+ | | 10h | WORD | initial SP | | ||
+ | | 12h | WORD | checksum (one's complement of sum of all words in executable) | ||
+ | | 14h | DWORD | initial CS:IP relative to start of executable | ||
+ | | 18h | WORD | offset within header of relocation table (40h for New EXE) | | ||
+ | | 1Ah | WORD | overlay number (normally 0000h = main program) | ||
+ | | ---new executable--- | ||
+ | | 1Ch | 4 BYTEs | ??? | | ||
+ | | 20h | WORD | behavior bits | | ||
+ | | 22h | 26 | BYTEs reserved for additional behavior info | | ||
+ | | 3Ch | DWORD | offset of new executable header within disk file | | ||
+ | | ---Borland TLINK--- | ||
+ | | 1Ch | 2 BYTEs | ??? (apparently always 01h 00h) | | ||
+ | | 1Eh | BYTE | signature FBh | | ||
+ | | 1Fh | BYTE | TLINK version (major in high nybble, minor in low nybble) | ||
+ | | 20h | 2 BYTEs | ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h) | | ||
+ | | ---ARJ self-extracting archive--- | ||
+ | | 1Ch | 4 BYTEs | signature " | ||
+ | | ---LZEXE 0.91 compressed executable--- | ||
+ | | 1Ch | 4 BYTEs | signature " | ||
+ | | ---PKLITE compressed executable--- | ||
+ | | 1Ch | 2 BYTEs | ??? | | ||
+ | | 1Eh | 6 BYTEs | signature " | ||
+ | | ---LHarc 1.x self-extracting archive--- | ||
+ | | 1Ch | 4 BYTEs | unused??? | ||
+ | | 20h | 3 BYTEs | jump to start of extraction code | | ||
+ | | 23h | 2 BYTEs | ??? | | ||
+ | | 25h | 12 BYTEs | signature " | ||
+ | | ---LHA 2.x self-extracting archive--- | ||
+ | | 1Ch | 8 BYTEs | ??? | | ||
+ | | 24h | 10 BYTEs | signature " | ||
+ | | ---other linkers--- | ||
+ | | 1Ch | var | optional information | ||
+ | | : | ||
+ | | N | N DWORDs | ||
+ | |||
+ | == Format of new executable header: == | ||
+ | |||
+ | ^ Offset ^ Size ^Description^ | ||
+ | | 00h |2 BYTEs |" | ||
+ | | 02h |2 BYTEs |linker version (major, then minor)| | ||
+ | | 04h| WORD |offset from start of this header to entry table (see below)| | ||
+ | | 06h| WORD |length of entry table in bytes| | ||
+ | | 08h| DWORD |file load CRC (0 in Borland' | ||
+ | | 0Ch| BYTE |program flags\\ bits 0-1 DGROUP type\\ | ||
+ | | 0Dh| BYTE |application flags\\ | ||
+ | | 0Eh| WORD |auto data segment index| | ||
+ | | 10h| WORD |initial local heap size| | ||
+ | | 12h| WORD |initial stack size (added to data seg, 0000h if SS != DS)| | ||
+ | | 14h| DWORD |program entry point (CS:IP), " | ||
+ | | 18h| DWORD |initial stack pointer (SS:SP), " | ||
+ | | 1Ch| WORD |segment count| | ||
+ | | 1Eh| WORD |module reference count| | ||
+ | | 20h| WORD |length of nonresident names table in bytes| | ||
+ | | 22h| WORD |offset from start of this header to segment table (see below)| | ||
+ | | 24h| WORD |offset from start of this header to resource table| | ||
+ | | 26h| WORD |offset from start of this header to resident names table| | ||
+ | | 28h| WORD |offset from start of this header to module reference table| | ||
+ | | 2Ah| WORD |offset from start of this header to imported names table\\ (array of counted strings, terminated with a string of length 00h)| | ||
+ | | 2Ch| DWORD |offset from start of file to nonresident names table| | ||
+ | | 30h| WORD |count of moveable entry point listed in entry table| | ||
+ | | 32h| WORD |file alignment size shift count\\ 0 is equivalent to 9 (default 512-byte pages)| | ||
+ | | 34h| WORD |number of resource table entries| | ||
+ | | 36h| BYTE |target operating system\\ | ||
+ | | 37h| BYTE |other EXE flags\\ | ||
+ | | 38h| WORD |offset to return thunks or start of gangload area| | ||
+ | | 3Ah| WORD |offset to segment reference thunks or length of gangload area| | ||
+ | | 3Ch| WORD |minimum code swap area size| | ||
+ | | 3Eh |2 BYTEs |expected Windows version (minor version first)| | ||
+ | |||
+ | Format of Codeview trailer (at end of executable): | ||
+ | ^ Offset | ||
+ | | 00h | WORD | signature 4E42h (' | ||
+ | | 02h | WORD | Microsoft debug info version number | ||
+ | | 04h | DWORD | Codeview header offset | ||
+ | |||
+ | == Format of new executable segment table record: == | ||
+ | |||
+ | ^Offset^ Size ^Description^ | ||
+ | | 00h| WORD |offset in file (shift left by alignment shift to get byte offs)| | ||
+ | | 02h| WORD |length of image in file (0000h = 64K)| | ||
+ | | 04h| WORD |attributes\\ | ||
+ | | 06h| WORD |number of bytes to allocate for segment (0000h = 64K)| | ||
+ | |||
+ | <WRAP round box> | ||
+ | the first segment table entry is entry number 1 | ||
+ | </ | ||
+ | |||
+ | == Format of new executable entry table item (list): == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | BYTE | number of entry points (00h if end of entry table list) ||| | ||
+ | | 01h | BYTE | segment number (00h if end of entry table list) ||| | ||
+ | | 02h | 3N BYTEs | entry records | ||
+ | | | ||
+ | | ::: | ::: | ||
+ | | ::: | ::: | ||
+ | |||
+ | == Format of new executable relocation data (immediately follows segment image): == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | WORD | number of relocation items ||| | ||
+ | | 02h | 8N BYTEs | relocation items ||| | ||
+ | | |^ Offset | ||
+ | | ::: | ::: | 00h | BYTE | relocation type\\ 00h LOBYTE\\ 02h BASE\\ 03h PTR\\ 05h OFFS\\ 0Bh PTR48\\ 0Dh OFFS32 | ||
+ | | ::: | ::: | 01h | BYTE | flags\\ bit 2: additive | ||
+ | | ::: | ::: | 02h | WORD | offset within segment | ||
+ | | ::: | ::: | 04h | WORD | target address segment | ||
+ | | ::: | ::: | 06h | WORD | target address offset | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | WORD | alignment shift count for resource data | | ||
+ | | 02h | N RECORDs | ||
+ | |||
+ | |||
+ | == Format of resource record: == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | WORD | type ID | | ||
+ | | | | 0000h if end of resource records\\ >= 8000h if integer type\\ else offset from start of resource table to type string | ||
+ | | 02h | WORD | number of resources of this type | | ||
+ | | 04h | DWORD | reserved for runtime use | | ||
+ | | 08h | N Resources | ||
+ | |||
+ | <WRAP round box> | ||
+ | resource type and name strings are stored immediately following the resource table, and are not null-terminated | ||
+ | </ | ||
+ | |||
+ | == Format of new executable resource entry: == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h |WORD |offset in alignment units from start of file to contents of the resource data| | ||
+ | | 02h |WORD |length of resource image in bytes| | ||
+ | | 04h |WORD |flags\\ bit 4: moveable\\ bit 5: shareable\\ bit 6: preloaded| | ||
+ | | 06h |WORD |resource ID\\ >= 8000h if integer resource\\ else offset from start of resource table to resource string| | ||
+ | | 08h |DWORD |reserved for runtime use| | ||
+ | |||
+ | <WRAP round box> | ||
+ | resource type and name strings are stored immediately following the resource table, and are not null-terminated | ||
+ | |||
+ | strings are counted strings, with a string of length 0 indicating the end of the resource table | ||
+ | </ | ||
+ | |||
+ | == Format of new executable module reference table [one bundle of entries]: == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | ||
+ | | 01h | ||
+ | | 02h | N RECORDs | ||
+ | | | Format of segment record | ||
+ | | ::: | ||
+ | | ::: | ||
+ | | ::: | ---fixed segment--- | ||
+ | | ::: | ||
+ | | ::: | ---moveable segment--- | ||
+ | | ::: | ||
+ | | ::: | ||
+ | | ::: | ||
+ | |||
+ | <WRAP round box> | ||
+ | table entries are numbered starting from 1 | ||
+ | </ | ||
+ | |||
+ | == Format of new executable resident/ | ||
+ | |||
+ | ^ Offset ^ Size ^Description^ | ||
+ | |00h | BYTE |length of string (00h if end of table)| | ||
+ | | 01h |N BYTEs |ASCII text of string| | ||
+ | | N+1 |WORD |ordinal number (index into entry table)| | ||
+ | |||
+ | <WRAP round box> | ||
+ | |||
+ | the first string in the resident name table is the module name; the first entry in the nonresident name table is the module description | ||
+ | |||
+ | the strings are case-sensitive; | ||
+ | </ | ||
+ | |||
+ | == Format of Linear Executable (enhanced mode executable) header: == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | ||
+ | | 02h | ||
+ | | 03h | ||
+ | | 04h | ||
+ | | 08h | ||
+ | | 0Ah | ||
+ | | 0Ch | ||
+ | | 10h | ||
+ | | 14h | ||
+ | | 18h | ||
+ | | | DWORD | object number | ||
+ | | | DWORD | offset | ||
+ | | 20h | ||
+ | | | DWORD | object number | ||
+ | | | DWORD | offset | ||
+ | | 28h | ||
+ | | 2Ch | ||
+ | | 30h | ||
+ | | 34h | ||
+ | | 38h | ||
+ | | 3Ch | ||
+ | | 40h | ||
+ | | 44h | ||
+ | | 48h | ||
+ | | 4CH | ||
+ | | 50h | ||
+ | | 54h | ||
+ | | 58h | ||
+ | | 5Ch | ||
+ | | 60h | ||
+ | | 64h | ||
+ | | 68h | ||
+ | | 6Ch | ||
+ | | 70h | ||
+ | | 74h | ||
+ | | 78h | ||
+ | | 7Ch | ||
+ | | 80h | ||
+ | | 84h | ||
+ | | 88h | ||
+ | | 8Ch | ||
+ | | 90h | ||
+ | | 94h | ||
+ | | 98h | ||
+ | | 9Ch | ||
+ | | A0h | ||
+ | | A4h | ||
+ | | A8h | ||
+ | | ACh | ||
+ | |||
+ | <WRAP round box> | ||
+ | used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers | ||
+ | </ | ||
+ | |||
+ | == Format of object table entry: == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | ||
+ | | 04h | ||
+ | | 08h | ||
+ | | 0Ch | ||
+ | | 10h | ||
+ | | 10h | ||
+ | |||
+ | == Format of object page map table entry: == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | ||
+ | |||
+ | == Format of resident names table entry: == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | ||
+ | | 01h | ||
+ | | N+1 | ||
+ | |||
+ | == Format of linear executable entry table: == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | ||
+ | | 01h | ||
+ | | |^ Offset | ||
+ | | ::: | ||
+ | | ::: | ||
+ | | ::: | ||
+ | | ::: | ||
+ | | ::: | ||
+ | |||
+ | == Format of Borland debugging information header (following load image): == | ||
+ | |||
+ | ^ Offset | ||
+ | | 00h | ||
+ | | 02h | ||
+ | | 04h | ||
+ | | 08h | ||
+ | | 0Ah | ||
+ | | 0Ch | ||
+ | | 0Eh | ||
+ | | 10h | ||
+ | | 12h | ||
+ | | 14h | ||
+ | | 16h | ||
+ | | 18h | ||
+ | | 1Ah | ||
+ | | 1Ch | ||
+ | | 1Eh | ||
+ | | 20h | ||
+ | | 24h | ||
+ | | 28h | ||
+ | | 29h | ||
+ | | 2Bh | ||
+ | | 2Dh | ||
+ | | 2Eh | ||
+ | | 30h | ||
+ | | 32h | ||
+ | | 34h | ||
+ | | 36h | ||
+ | | 38h | ||
+ | | 3Ah | ||
+ | | 3Ch | ||
+ | | 3Eh | ||
+ | | 42h | ||
+ | | 44h | ||
+ | | 46h | ||
+ | | 48h | ||
+ | |||
+ | <WRAP round box> | ||
+ | additional information on the Borland debugging info may be found in Borland' | ||
+ | </ | ||
+ | |||
+ | ==== 4Bh - ELRES v1.0 only - INSTALLATION CHECK ==== | ||
+ | |||
+ | AH = 4Bh | ||
+ | DS:DX = 0000h:0000h | ||
+ | Return: ES:BX -> ELRES history structure (see AH=2Bh/ | ||
+ | DX = DABEh (signature, DAve BEnnett) | ||
+ | Note: ELRES is an MSDOS return code (errorlevel) recorder by David H. Bennett | ||
+ | SeeAlso: AH=2Bh/ | ||
+ | |||
+ | ==== 4B04h - VIRUS - " | ||
+ | < | ||
+ | AX = 4B04h | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if " | ||
+ | AX = 044Bh if " | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4243h, | ||
+ | |||
+ | ==== 4B43h - DOS 5.0 - SET EXECUTION STATE ==== | ||
+ | < | ||
+ | AX = 4B05h | ||
+ | DS:DX -> execution state structure (see below) | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | AX = 0000h | ||
+ | CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | </ | ||
+ | |||
+ | <WRAP round box> | ||
+ | used by programs which intercept AX=4B00h to prepare new programs for execution (including setting the DOS version number). No DOS, BIOS or other software interrupt may be called after return from this call before commencement of the child process. If DOS is running in the HMA, A20 is turned off on return from this call. | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=4Bh | ||
+ | |||
+ | Format of execution state structure: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | bit 0: program is an .EXE | ||
+ | 1: program is an overlay | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | ==== 4B25h - VIRUS - " | ||
+ | |||
+ | AX = 4B25h | ||
+ | Return: DI = 1234h if resident | ||
+ | SeeAlso: AX=4B04h, | ||
+ | |||
+ | ==== 4B40h - VIRUS - " | ||
+ | |||
+ | AX = 4B40h | ||
+ | Return: AX = 5678h if resident | ||
+ | SeeAlso: AX=4B25h, | ||
+ | |||
+ | ==== 4B41h - VIRUS - " | ||
+ | |||
+ | AX = 4B41h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=4B40h | ||
+ | |||
+ | ==== 4B4Ah - VIRUS - " | ||
+ | |||
+ | AX = 4B4Ah | ||
+ | Return: AL = 57h if resident | ||
+ | SeeAlso: AX=4B40h, | ||
+ | |||
+ | ==== 4B4Bh - VIRUS - " | ||
+ | |||
+ | AX = 4B4Bh | ||
+ | Return: CF clear if resident | ||
+ | SeeAlso: AX=4B4Ah, | ||
+ | |||
+ | ==== 4B4Dh - VIRUS - " | ||
+ | |||
+ | AX = 4B4Dh | ||
+ | Return: CF clear if resident | ||
+ | SeeAlso: AX=4B4Ah, | ||
+ | |||
+ | ==== 4B50h - VIRUS - " | ||
+ | |||
+ | AX = 4B50h | ||
+ | Return: AX = 1234h if resident | ||
+ | SeeAlso: AX=4B4Dh, | ||
+ | |||
+ | ==== 4B4Dh - VIRUS - " | ||
+ | |||
+ | AX = 4B53h | ||
+ | Return: CF clear if resident | ||
+ | SeeAlso: AX=4B50h, | ||
+ | |||
+ | ==== 4B55h - VIRUS - " | ||
+ | |||
+ | AX = 4B55h | ||
+ | Return: AX = 1231h if resident | ||
+ | SeeAlso: AX=4B53h, | ||
+ | |||
+ | ==== 4B59h - VIRUS - " | ||
+ | |||
+ | AX = 4B59h | ||
+ | Return: CF clear if resident | ||
+ | SeeAlso: AX=4B50h, | ||
+ | |||
+ | ==== 4B5Eh - VIRUS - " | ||
+ | |||
+ | AX = 4B5Eh | ||
+ | Return: CF clear if resident | ||
+ | SeeAlso: AX=4B59h, | ||
+ | |||
+ | ==== 4B60h - VIRUS - " | ||
+ | |||
+ | AX = 4B60h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=4B50h | ||
+ | |||
+ | ==== 4B87h - VIRUS - " | ||
+ | |||
+ | AX = 4B87h | ||
+ | Return: AX = 6663h if resident | ||
+ | SeeAlso: AX=4B5Eh, | ||
+ | |||
+ | ==== 4B95h - VIRUS - " | ||
+ | |||
+ | AX = 4B95h | ||
+ | Return: AX = 1973h if resident | ||
+ | SeeAlso: AX=4B87h, | ||
+ | |||
+ | ==== 4BA7h - VIRUS - " | ||
+ | |||
+ | AX = 4BA7h | ||
+ | Return: AX = B459h if resident | ||
+ | SeeAlso: AX=4B95h, | ||
+ | |||
+ | ==== 4BAAh - VIRUS - " | ||
+ | |||
+ | AX = 4BAAh | ||
+ | Return: CF clear if resident | ||
+ | SeeAlso: AX=4BA7h, | ||
+ | |||
+ | ==== 4BAFh - VIRUS - " | ||
+ | |||
+ | AX = 4BAFh | ||
+ | Return: AL = AFh if " | ||
+ | AL = FAh if " | ||
+ | SeeAlso: AX=4BAAh, | ||
+ | |||
+ | ==== 4BDDh - VIRUS - " | ||
+ | |||
+ | AX = 4BDDh | ||
+ | Return: AX = 1234h | ||
+ | SeeAlso: AX=4BAFh, | ||
+ | |||
+ | ==== 4BEEh - F-DRIVER.SYS v1.14+ - GRAB INT 21 ==== | ||
+ | |||
+ | AX = 4BEEh | ||
+ | Return: AX = 1234h if grab successful | ||
+ | = 2345h if failed (INT 21 grabbed previously) | ||
+ | Notes: | ||
+ | Fridrik Skulason | ||
+ | when called the first time, this function moves the INT 21 monitoring | ||
+ | code from its original location in the INT 21 chain to be the first | ||
+ | thing called by INT 21. This is the mechanism used by F-NET. | ||
+ | SeeAlso: INT 2F/AX=4653h | ||
+ | |||
+ | ==== 4BF0h - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK ==== | ||
+ | |||
+ | AX = 4BF0h | ||
+ | Return: CF clear if installed | ||
+ | AX = 899Dh | ||
+ | Note: DIET is an executable-compression program | ||
+ | SeeAlso: AX=4BF1h | ||
+ | |||
+ | ==== 4BF1h - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM??? ==== | ||
+ | |||
+ | AX = 4BF1h | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=4BF0h | ||
+ | |||
+ | ==== 4BFEh - VIRUS - " | ||
+ | |||
+ | AX = 4BFEh | ||
+ | Return: AX = 1234h if " | ||
+ | AX = ABCDh if " | ||
+ | DI = 55BBh if "Dark Avenger-1028" | ||
+ | SeeAlso: AX=4BDDh, | ||
+ | |||
+ | ==== 4BFFh - VIRUS - " | ||
+ | < | ||
+ | AX = 4BFFh | ||
+ | </ | ||
+ | < | ||
+ | Return: BL = FFh if " | ||
+ | DI = 55AAh if " | ||
+ | CF clear if " | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4BFEh, | ||
+ | |||
+ | ==== 4BFFh - VIRUS - " | ||
+ | < | ||
+ | AX = 4BFFh | ||
+ | SI = 0000h | ||
+ | DI = 0000h | ||
+ | </ | ||
+ | < | ||
+ | Return: DI = 55AAh if installed | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=4BFFh" | ||
+ | |||
+ | ===== 4Ch - DOS 2+ - " | ||
+ | < | ||
+ | AH = 4Ch | ||
+ | AL = return code | ||
+ | </ | ||
+ | < | ||
+ | Return: never returns | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | unless the process is its own parent (see AH=26h, offset 16h in PSP), all open files are closed and all memory belonging to the process is freed | ||
+ | |||
+ | all network file locks should be removed before calling this function | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=00h, | ||
+ | |||
+ | SeeAlso: INT 60/DI=0601h | ||
+ | |||
+ | ===== 4Dh - DOS 2+ - GET RETURN CODE ===== | ||
+ | < | ||
+ | AH = 4Dh | ||
+ | </ | ||
+ | < | ||
+ | Return: AH = termination type | ||
+ | 00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch) | ||
+ | 01h control-C abort | ||
+ | 02h critical error abort | ||
+ | 03h terminate and stay resident (INT 21/AH=31h or INT 27) | ||
+ | AL = return code | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | the word in which DOS stores the return code is cleared after being read by this function, so the return code can only be retrieved once | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=4Bh, | ||
+ | |||
+ | ===== 4Eh - DOS 2+ - " | ||
+ | < | ||
+ | AH = 4Eh | ||
+ | AL = special flag for use by APPEND (see note below) | ||
+ | CX = file attribute mask (see AX=4301h) (bits 0 and 5 ignored) | ||
+ | DS:DX -> ASCIZ file specification (may include path and wildcards) | ||
+ | </ | ||
+ | < | ||
+ | Return: CF clear if successful | ||
+ | [DTA] = FindFirst data block (see below) | ||
+ | CF set on error | ||
+ | AX = error code (02h, | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | for search attributes other than 08h, all files with at MOST the specified combination of hidden, system, and directory attributes will be returned. | ||
+ | |||
+ | this call also returns successfully if given the name of a character device without wildcards. | ||
+ | |||
+ | immediately after an INT 2F/AX=B711h (APPEND return found name), the name at DS:DX will be overwritten; | ||
+ | |||
+ | under LANtastic, this call may be used to obtain a list of a server' | ||
+ | |||
+ | BUG: under DOS 3.x and 4.x, the second and subsequent calls to this function with a character device name (no wildcards) and search attributes which include the volume-label bit (08h) will fail unless there is an intervening DOS call which implicitly or explicity performs a directory search without the volume-label bit. Such implicit searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK (AH=41h), and RENAME (AH=56h) | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=11h, | ||
+ | |||
+ | Format of FindFirst data block: | ||
+ | Offset Size Description | ||
+ | ---PCDOS 3.10, PCDOS 4.01, MSDOS 3.2/ | ||
+ | | ||
+ | 01h 11 BYTEs search template | ||
+ | | ||
+ | ---DOS 2.x (and some DOS 3.x???)--- | ||
+ | | ||
+ | | ||
+ | 02h 11 BYTEs search template | ||
+ | ---WILDUNIX.COM--- | ||
+ | 00h 12 BYTEs 15-character wildcard search pattern and drive letter (packed) | ||
+ | | ||
+ | ---DOS 2.x and most 3.x--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | ---PCDOS 4.01, MSDOS 3.2/ | ||
+ | | ||
+ | | ||
+ | | ||
+ | ---all versions, documented fields--- | ||
+ | | ||
+ | | ||
+ | bits 11-15: hour | ||
+ | bits 5-10: | ||
+ | bits 0-4: | ||
+ | | ||
+ | bits 9-15: | ||
+ | bits 5-8: month | ||
+ | bits 0-4: day | ||
+ | | ||
+ | 1Eh 13 BYTEs ASCIZ filename+extension | ||
+ | ----------214E------------------------------- | ||
+ | INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK | ||
+ | AH = 4Eh | ||
+ | DS:DX = 0000h:0000h | ||
+ | Return: AH = 99h if installed | ||
+ | Note: | ||
+ | Hosgood and Terry Barnaby | ||
+ | ----------214F------------------------------- | ||
+ | INT 21 - DOS 2+ - " | ||
+ | AH = 4Fh | ||
+ | [DTA] = data block from previous FindFirst or FindNext call | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (12h) (see AH=59h) | ||
+ | SeeAlso: AH=12h, | ||
+ | ----------2150------------------------------- | ||
+ | INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS) | ||
+ | AH = 50h | ||
+ | BX = segment of PSP for new process | ||
+ | Notes: DOS uses the current PSP address to determine which processes own files | ||
+ | and memory; it corresponds to process identifiers used by other OSs | ||
+ | under DOS 2.x, this function cannot be invoked inside an INT 28h | ||
+ | handler without setting the Critical Error flag | ||
+ | under DOS 3+, this function does not use any of the DOS-internal stacks | ||
+ | and may thus be called at any time, even during another INT 21h call | ||
+ | supported by OS/2 compatibility box | ||
+ | not documented for DOS 2.x-4.x, but newly documented for 5.0. | ||
+ | SeeAlso: AH=26h, | ||
+ | ----------2151------------------------------- | ||
+ | INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS) | ||
+ | AH = 51h | ||
+ | Return: BX = segment of PSP for current process | ||
+ | Notes: DOS uses the current PSP address to determine which processes own files | ||
+ | and memory; it corresponds to process identifiers used by other OSs | ||
+ | under DOS 2.x, this function cannot be invoked inside an INT 28h | ||
+ | handler without setting the Critical Error flag | ||
+ | under DOS 3+, this function does not use any of the DOS-internal stacks | ||
+ | and may thus be called at any time, even during another INT 21h call | ||
+ | supported by OS/2 compatibility box | ||
+ | identical to the documented AH=62h | ||
+ | undocumented for DOS 2.x-4.x, but newly documented for 5.0. | ||
+ | SeeAlso: AH=26h, | ||
+ | ----------2152------------------------------- | ||
+ | INT 21 U - DOS 2+ internal - " | ||
+ | AH = 52h | ||
+ | Return: ES:BX -> DOS list of lists | ||
+ | Note: | ||
+ | pointers are FFFFh: | ||
+ | pointer is FFFFh: | ||
+ | |||
+ | Format of List of Lists: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | when CON is read via a handle, DOS reads an entire line, | ||
+ | and returns the requested portion, buffering the rest | ||
+ | for the next read. 0000h indicates no unread input | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ---DOS 2.x--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | 17h 18 BYTEs actual NUL device driver header (not a pointer!) | ||
+ | NUL is always the first device on DOS's linked list of device | ||
+ | drivers. (see below for format) | ||
+ | ---DOS 3.0--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 28h 18 BYTEs actual NUL device driver header (not a pointer!) | ||
+ | NUL is always the first device on DOS's linked list of device | ||
+ | drivers. (see below for format) | ||
+ | ---DOS 3.1-3.3--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | block devices, and CONFIG.SYS LASTDRIVE=). | ||
+ | current directory structure array. | ||
+ | 22h 18 BYTEs actual NUL device driver header (not a pointer!) | ||
+ | NUL is always the first device on DOS's linked list of device | ||
+ | drivers. (see below for format) | ||
+ | | ||
+ | ---DOS 4.x--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | (always 00h for DOS 5.0) | ||
+ | | ||
+ | | ||
+ | block devices, and CONFIG.SYS LASTDRIVE=). | ||
+ | current directory structure array. | ||
+ | 22h 18 BYTEs actual NUL device driver header (not a pointer!) | ||
+ | NUL is always the first device on DOS's linked list of device | ||
+ | drivers. (see below for format) | ||
+ | | ||
+ | | ||
+ | names (see below) | ||
+ | (always 0000h for DOS 5.0) | ||
+ | | ||
+ | (see below) | ||
+ | may be called by any IFS driver which does not wish to | ||
+ | service functions 20h or 24h-28h itself | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ---DOS 5.0--- | ||
+ | 10h 39 BYTEs as for DOS 4.x (see above) | ||
+ | | ||
+ | | ||
+ | | ||
+ | EXECed program if DOS in HMA | ||
+ | | ||
+ | |||
+ | Format of memory control block (see also below): | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | 0000h if free | ||
+ | 0006h if DR-DOS XMS UMB | ||
+ | 0007h if DR-DOS excluded upper memory (" | ||
+ | 0008h if belongs to DOS | ||
+ | FFFAh if 386MAX UMB control block | ||
+ | FFFDh if 386MAX locked-out memory | ||
+ | FFFEh if 386MAX UMB (immediately follows its control block) | ||
+ | | ||
+ | | ||
+ | ---DOS 2.x,3.x--- | ||
+ | | ||
+ | ---DOS 4+ --- | ||
+ | | ||
+ | else garbage | ||
+ | null-terminated if less than 8 characters | ||
+ | Notes: the next MCB is at segment (current + size + 1) | ||
+ | under DOS 3.1+, the first memory block is the DOS data segment, | ||
+ | containing installable drivers, buffers, etc. Under DOS 4+ it is | ||
+ | divided into subsegments, | ||
+ | (see below), the first of which is at offset 0000h. | ||
+ | for DOS 5.0, blocks owned by DOS may have either " | ||
+ | 08h and 09h. " | ||
+ | " | ||
+ | Some versions of DR-DOS use only seven characters of the program name, | ||
+ | placing a NUL in the eighth byte. | ||
+ | |||
+ | Format of MSDOS 5.0 UMB control block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | of UMB, 000Ah if control block at end of UMB | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of STARLITE memory control block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of DOS 4.x data segment subsegment control blocks: | ||
+ | Offset Size Description | ||
+ | | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | was loaded (unused for other types) | ||
+ | |||
+ | Format of data at start of STACKS code segment (if present): | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | the next stack to be allocated (initially same as value in 0Eh | ||
+ | and works its way down in steps of 8 to the value in 0Ch as | ||
+ | hardware interrupts pre-empt each other) | ||
+ | Note: the STACKS code segment data may, if present, be located as follows: | ||
+ | DOS 3.2: The code segment data is at a paragraph boundary fairly early | ||
+ | in the IBMBIO segment (seen at 0070:0190h) | ||
+ | DOS 3.3: The code segment is at a paragraph boundary in the DOS data | ||
+ | segment, which may be determined by inspecting the segment | ||
+ | pointers of the vectors for those of interrupts 02h, 08h-0Eh, | ||
+ | 70h, 72-77h which have not been redirected by device drivers or | ||
+ | TSRs. | ||
+ | DOS 4.x: | ||
+ | data segment. | ||
+ | |||
+ | Format of array elements in STACKS data segment: | ||
+ | Offset Size Description | ||
+ | | ||
+ | higher stack. | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | top of the stack is preset to point back to this control block. | ||
+ | |||
+ | SHARE.EXE hooks (DOS 3.1-5.00): | ||
+ | (offsets from first system file table--pointed at by ListOfLists+04h) | ||
+ | Offset Size Description | ||
+ | -3Ch DWORD pointer to FAR routine for ??? | ||
+ | Note: not called by MSDOS 3.3, set to 0000h:0000h by SHARE 3.3 | ||
+ | -38h DWORD pointer to FAR routine called on opening file | ||
+ | on call, internal DOS location points at filename(see AX=5D06h) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = DOS error code (24h) (see AH=59h) | ||
+ | Note: SHARE assumes DS=SS=DOS DS, direct-accesses DOS internals | ||
+ | to get name of file just opened | ||
+ | -34h DWORD pointer to FAR routine called on closing file | ||
+ | ES:DI -> system file table | ||
+ | Note: SHARE assumes SS=DOS DS, directly accesses DOS internals | ||
+ | does something to every lock record for file | ||
+ | -30h DWORD pointer to FAR routine to close all files for given computer | ||
+ | (called by AX=5D03h) | ||
+ | Note: SHARE assumes SS=DOS DS, directly accesses DOS internals | ||
+ | -2Ch DWORD pointer to FAR routine to close all files for given process | ||
+ | (called by AX=5D04h) | ||
+ | Note: SHARE assumes SS=DOS DS, directly accesses DOS internals | ||
+ | -28h DWORD pointer to FAR routine to close file by name | ||
+ | (called by AX=5D02h) | ||
+ | DS:SI -> DOS parameter list (see AX=5D00h) | ||
+ | | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = DOS error code (03h) (see AH=59h) | ||
+ | Note: SHARE assumes SS=DOS DS, directly accesses DOS internals | ||
+ | -24h DWORD pointer to FAR routine to lock region of file | ||
+ | call with BX = file handle | ||
+ | CX:DX = starting offset | ||
+ | SI:AX = size | ||
+ | Return: CF set on error | ||
+ | AL = DOS error code (21h) (see AH=59h) | ||
+ | Note: not called if file is marked as remote | ||
+ | Note: SHARE assumes SS=DOS DS, directly accesses DOS internals | ||
+ | -20h DWORD pointer to FAR routine to unlock region of file | ||
+ | call with BX = file handle | ||
+ | CX:DX = starting offset | ||
+ | SI:AX = size | ||
+ | Return: CF set on error | ||
+ | AL = DOS error code (21h) (see AH=59h) | ||
+ | Note: not called if file is marked as remote | ||
+ | Note: SHARE assumes SS=DOS DS, directly accesses DOS internals | ||
+ | -1Ch DWORD pointer to FAR routine to check if file region is locked | ||
+ | call with ES:DI -> system file table entry for file | ||
+ | CX = length of region from current position in file | ||
+ | Return: CF set if any portion of region locked | ||
+ | AX = 0021h | ||
+ | Note: SHARE assumes SS=DOS DS, directly accesses DOS internals | ||
+ | -18h DWORD pointer to FAR routine to get open file list entry | ||
+ | (called by AX=5D05h) | ||
+ | call with DS:SI -> DOS parameter list (see AX=5D00h) | ||
+ | DPL' | ||
+ | DPL' | ||
+ | Return: CF set on error or not loaded | ||
+ | AX = DOS error code (12h) (see AH=59h) | ||
+ | CF clear if successful | ||
+ | ES:DI -> filename | ||
+ | CX = number of locks owned by specified SFT | ||
+ | BX = network machine number | ||
+ | DX destroyed | ||
+ | Note: SHARE assumes SS=DOS DS, directly accesses DOS internals | ||
+ | -14h DWORD pointer to FAR routine for updating FCB from SFT??? | ||
+ | call with DS:SI -> unopened FCB | ||
+ | ES:DI -> system file table entry | ||
+ | Return: BL = C0h??? | ||
+ | Note: copies following fields from SFT to FCB: | ||
+ | | ||
+ | | ||
+ | file attribute | ||
+ | -10h DWORD pointer to FAR routine to get first cluster of FCB file ??? | ||
+ | call with ES:DI -> system file table entry | ||
+ | DS:SI -> FCB | ||
+ | Return: CF set if SFT closed or sharing record offsets | ||
+ | mismatched | ||
+ | CF clear if successful | ||
+ | BX = starting cluster number from FCB | ||
+ | -0Ch DWORD pointer to FAR routine to close file if duplicate for process | ||
+ | DS:SI -> system file table | ||
+ | Return: AX = number of handle in JFT which already uses SFT | ||
+ | Note: called during open/create of a file | ||
+ | Note: SHARE assumes SS=DOS DS, directly accesses DOS internals | ||
+ | Note: if SFT was opened with inheritance enabled and sharing | ||
+ | mode 111, does something to all other SFTs owned by | ||
+ | same process which have the same file open mode and | ||
+ | sharing record | ||
+ | -08h DWORD pointer to FAR routine for ??? | ||
+ | Note: SHARE assumes SS=DS=DOS DS, direct-accesses DOS internals | ||
+ | Note: closes various handles referring to file most-recently | ||
+ | opened | ||
+ | -04h DWORD pointer to FAR routine to update directory info in related SFT | ||
+ | entries | ||
+ | call with ES:DI -> system file table entry for file (see below) | ||
+ | AX = subfunction (apply to each related SFT) | ||
+ | 00h: update time stamp (offset 0Dh) and date | ||
+ | stamp (offset 0Fh) | ||
+ | 01h: update file size (offset 11h) and starting | ||
+ | | ||
+ | | ||
+ | never accessed | ||
+ | 02h: as function 01h, but last-accessed fields | ||
+ | | ||
+ | 03h: do both functions 00h and 02h | ||
+ | Note: follows ptr at offset 2Bh in system file table entries | ||
+ | Note: NOP if opened with no-inherit or via FCB | ||
+ | |||
+ | Format of sharing record: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 00h free block | ||
+ | 01h allocated block | ||
+ | FFh end marker | ||
+ | | ||
+ | | ||
+ | if sum of ASCII values is N, checksum is (N/256 + N%256) | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of SHARE.EXE lock record: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of DOS 2.x system file tables: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | Offset Size Description | ||
+ | 00h BYTE number of file handles referring to this file | ||
+ | 01h BYTE file open mode (see AH=3Dh) | ||
+ | 02h BYTE file attribute | ||
+ | 03h BYTE drive (0 = character device, 1 = A, 2 = B, etc) | ||
+ | 04h 11 BYTEs filename in FCB format (no path,no period, | ||
+ | 0Fh WORD ??? | ||
+ | 11h WORD ??? | ||
+ | 13h DWORD file size??? | ||
+ | 17h WORD file date in packed format (see AX=5700h) | ||
+ | 19h WORD file time in packed format (see AX=5700h) | ||
+ | 1Bh BYTE device attribute (see AX=4400h) | ||
+ | ---character device--- | ||
+ | 1Ch DWORD pointer to device driver | ||
+ | ---block device--- | ||
+ | 1Ch WORD starting cluster of file | ||
+ | 1Eh WORD relative cluster in file of last cluster accessed | ||
+ | ------ | ||
+ | 20h WORD absolute cluster number of current cluster | ||
+ | 22h WORD ??? | ||
+ | 24h DWORD current file position??? | ||
+ | |||
+ | Format of DOS 3.0 system file tables and FCB tables: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | Offset Size Description | ||
+ | 00h-1Eh as for DOS 3.1+ (see below) | ||
+ | 1Fh WORD byte offset of directory entry within sector | ||
+ | 21h 11 BYTES filename in FCB format (no path/ | ||
+ | 2Ch DWORD (SHARE.EXE) pointer to previous SFT sharing same file | ||
+ | 30h WORD (SHARE.EXE) ??? network machine number | ||
+ | 32h WORD PSP segment of file's owner | ||
+ | 34h WORD (SHARE.EXE) offset in SHARE code seg of share record | ||
+ | 36h WORD ??? | ||
+ | |||
+ | Format of DOS 3.1-3.3x system file tables and FCB tables: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | Offset Size Description | ||
+ | 00h WORD number of file handles referring to this file | ||
+ | 02h WORD file open mode (see AH=3Dh) | ||
+ | bit 15 set if this file opened via FCB | ||
+ | 04h BYTE file attribute (see AX=4301h) | ||
+ | 05h WORD device info word (see AX=4400h) | ||
+ | bit 15 set if remote file | ||
+ | bit 14 set means do not set file date/time on closing | ||
+ | bit 12 set means don't inherit on EXEC | ||
+ | 07h DWORD pointer to device driver header if character device | ||
+ | else pointer to DOS Drive Parameter Block (see AH=32h) | ||
+ | 0Bh WORD starting cluster of file | ||
+ | 0Dh WORD file time in packed format (see AX=5700h) | ||
+ | 0Fh WORD file date in packed format (see AX=5700h) | ||
+ | 11h DWORD file size | ||
+ | ---system file table--- | ||
+ | 15h DWORD current offset in file (may be larger than size of | ||
+ | file; INT 21/AH=42h does not check new position) | ||
+ | ---FCB table--- | ||
+ | 15h WORD counter for last I/O to FCB | ||
+ | 17h WORD counter for last open of FCB | ||
+ | (these are separate to determine the times of the | ||
+ | latest I/O and open) | ||
+ | --- | ||
+ | 19h WORD relative cluster within file of last cluster accessed | ||
+ | 1Bh WORD absolute cluster number of last cluster accessed | ||
+ | 0000h if file never read or written??? | ||
+ | 1Dh WORD number of sector containing directory entry | ||
+ | 1Fh BYTE number of dir entry within sector (byte offset/32) | ||
+ | 20h 11 BYTEs filename in FCB format (no path/ | ||
+ | 2Bh DWORD (SHARE.EXE) pointer to previous SFT sharing same file | ||
+ | 2Fh WORD (SHARE.EXE) network machine number which opened file | ||
+ | 31h WORD PSP segment of file's owner (see AH=26h) | ||
+ | 33h WORD offset within SHARE.EXE code segment of | ||
+ | sharing record (see above) | ||
+ | |||
+ | Format of DOS 4.0-5.0 system file tables and FCB tables: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | Offset Size Description | ||
+ | 00h WORD number of file handles referring to this file | ||
+ | 02h WORD file open mode (see AH=3Dh) | ||
+ | bit 15 set if this file opened via FCB | ||
+ | 04h BYTE file attribute (see AX=4301h) | ||
+ | 05h WORD device info word (see AX=4400h) | ||
+ | bit 15 set if remote file | ||
+ | bit 14 set means do not set file date/time on closing | ||
+ | bit 13 set if named pipe | ||
+ | bit 12 set if no inherit | ||
+ | bit 11 set if network spooler | ||
+ | 07h DWORD pointer to device driver header if character device | ||
+ | else pointer to DOS Drive Parameter Block (see AH=32h) | ||
+ | or REDIR data | ||
+ | 0Bh WORD starting cluster of file | ||
+ | 0Dh WORD file time in packed format (see AX=5700h) | ||
+ | 0Fh WORD file date in packed format (see AX=5700h) | ||
+ | 11h DWORD file size | ||
+ | 15h DWORD current offset in file | ||
+ | ---local file--- | ||
+ | 19h WORD relative cluster within file of last cluster accessed | ||
+ | 1Bh DWORD number of sector containing directory entry | ||
+ | 1Fh BYTE number of dir entry within sector (byte offset/32) | ||
+ | ---network redirector--- | ||
+ | 19h DWORD pointer to REDIRIFS record | ||
+ | 1Dh 3 BYTEs ??? | ||
+ | ------ | ||
+ | 20h 11 BYTEs filename in FCB format (no path/ | ||
+ | 2Bh DWORD (SHARE.EXE) pointer to previous SFT sharing same file | ||
+ | 2Fh WORD (SHARE.EXE) network machine number which opened file | ||
+ | 31h WORD PSP segment of file's owner (see AH=26h) | ||
+ | 33h WORD offset within SHARE.EXE code segment of | ||
+ | sharing record (see above) | ||
+ | 35h WORD (local) absolute cluster number of last clustr accessed | ||
+ | (redirector) ??? | ||
+ | 37h DWORD pointer to IFS driver for file, 0000000h if native DOS | ||
+ | |||
+ | Format of current directory structure (CDS) (array, LASTDRIVE entries): | ||
+ | Offset Size Description | ||
+ | 00h 67 BYTEs ASCIZ path in form X:\PATH (local) or \\MACH\PATH (network) | ||
+ | | ||
+ | bit 15: uses network redirector \ invalid if 00, installable | ||
+ | 14: physical drive / file system if 11 | ||
+ | 13: JOIN' | ||
+ | 12: SUBST' | ||
+ | | ||
+ | ---local drives--- | ||
+ | | ||
+ | 0000h = root, FFFFh = never accessed | ||
+ | | ||
+ | | ||
+ | ---network drives--- | ||
+ | | ||
+ | | ||
+ | ------ | ||
+ | | ||
+ | root directory for drive | ||
+ | this value specifies how many characters to hide from the | ||
+ | " | ||
+ | drive letter and colon, SUBST, JOIN, and networks change it | ||
+ | so that only the appropriate portion of the true path is | ||
+ | visible to the user | ||
+ | ---DOS 4.x--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | Notes: the path for invalid drives is normally set to X:\, but may be empty | ||
+ | after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions | ||
+ | normally, only one of bits 13&12 may be set together with bit 14, but | ||
+ | DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN, | ||
+ | 0001 SUBST, 0101 ASSIGN | ||
+ | |||
+ | Format of DR-DOS 5.0-6.0 current directory structure entry (array): | ||
+ | Offset Size Description | ||
+ | 00h 67 BYTEs ASCIZ pathname of actual root directory for this logical drive | ||
+ | | ||
+ | 1000h SUBSTed drive | ||
+ | 3000h??? JOINed drive | ||
+ | 4000h physical drive | ||
+ | 5000h ASSIGNed drive | ||
+ | 7000h JOINed drive | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 0000h if physical root directory | ||
+ | |||
+ | Format of device driver header: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | Character device: | ||
+ | bit 15 set | ||
+ | bit 14 IOCTL supported (see AH=44h) | ||
+ | bit 13 (DOS 3+) output until busy supported | ||
+ | bit 12 reserved | ||
+ | bit 11 (DOS 3+) OPEN/ | ||
+ | bits 10-8 reserved | ||
+ | bit 7 (DOS 5+) Generic IOCTL check call supported (cmd 19h) | ||
+ | (see AX=4410h, | ||
+ | bit 6 (DOS 3.2+) Generic IOCTL call supported (command 13h) | ||
+ | (see AX=440Ch, | ||
+ | bit 5 reserved | ||
+ | bit 4 device is special (use INT 29 "fast console output" | ||
+ | bit 3 device is CLOCK$ (all reads/ | ||
+ | record described below) | ||
+ | bit 2 device is NUL | ||
+ | bit 1 device is standard output | ||
+ | bit 0 device is standard input | ||
+ | Block device: | ||
+ | bit 15 clear | ||
+ | bit 14 IOCTL supported | ||
+ | bit 13 non-IBM format | ||
+ | bit 12 reserved | ||
+ | bit 11 (DOS 3+) OPEN/ | ||
+ | bit 10 reserved | ||
+ | bit 9 direct I/O not allowed??? | ||
+ | (set by DOS 3.3 DRIVER.SYS for " | ||
+ | bit 8 ??? set by DOS 3.3 DRIVER.SYS for " | ||
+ | bit 7 (DOS 5+) Generic IOCTL check call supported (cmd 19h) | ||
+ | (see AX=4410h, | ||
+ | bit 6 (DOS 3.2+) Generic IOCTL call supported (command 13h) | ||
+ | implies support for commands 17h and 18h | ||
+ | (see AX=440Ch, | ||
+ | bits 5-2 reserved | ||
+ | bit 1 | ||
+ | bit 0 | ||
+ | | ||
+ | call with ES:BX -> request header (see INT 2F/ | ||
+ | | ||
+ | ---character device--- | ||
+ | | ||
+ | ---block device--- | ||
+ | | ||
+ | | ||
+ | --- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | (currently ' | ||
+ | |||
+ | Format of CLOCK$ transfer record: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of DOS 2.x disk buffer: | ||
+ | Offset Size Description | ||
+ | | ||
+ | least-recently used buffer is first in chain | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of DOS 3.x disk buffer: | ||
+ | Offset Size Description | ||
+ | | ||
+ | least-recently used buffer is first in chain | ||
+ | | ||
+ | | ||
+ | bit 7: ??? | ||
+ | bit 6: buffer dirty | ||
+ | bit 5: buffer has been referenced | ||
+ | bit 4: ??? | ||
+ | bit 3: sector in data area | ||
+ | bit 2: sector in a directory, either root or subdirectory | ||
+ | bit 1: sector in FAT | ||
+ | bit 0: boot sector??? (guess) | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of DOS 4.00 (pre UR 25066) disk buffer info: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | if BUFFERS/XS or /XD options in effect, possibly to avoid DMA | ||
+ | into EMS | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of DOS 4.x disk buffer hash chain head (array, one entry per chain): | ||
+ | Offset Size Description | ||
+ | | ||
+ | in EMS | ||
+ | | ||
+ | this chain are in the same segment. | ||
+ | | ||
+ | | ||
+ | Notes: | ||
+ | address modulo NDBCH, 0 <= N <= NDBCH-1 | ||
+ | each chain resides completely within one EMS page | ||
+ | this structure is in main memory even if buffers are in EMS | ||
+ | |||
+ | Format of DOS 4.0-5.0 disk buffer: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | bit 7: remote buffer | ||
+ | bit 6: buffer dirty | ||
+ | bit 5: buffer has been referenced | ||
+ | bit 4: search data buffer (only valid if remote buffer) | ||
+ | bit 3: sector in data area | ||
+ | bit 2: sector in a directory, either root or subdirectory | ||
+ | bit 1: sector in FAT | ||
+ | bit 0: reserved | ||
+ | | ||
+ | | ||
+ | for FAT sectors, same as number of FATs | ||
+ | for data and directory sectors, usually 1 | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Note: for DOS 4.x, all buffered sectors which have the same hash value | ||
+ | (computed as the sum of high and low words of the logical sector | ||
+ | number divided by NDBCH) are on the same doubly-linked circular | ||
+ | chain; for DOS 5.0, only a single circular chain exists. | ||
+ | the links consist of offset addresses only, the segment being the same | ||
+ | for all buffers in the chain. | ||
+ | |||
+ | Format of DOS 5.0 disk buffer info: | ||
+ | Offset Size Description | ||
+ | | ||
+ | (see above) | ||
+ | | ||
+ | directly at the only buffer chain) | ||
+ | | ||
+ | | ||
+ | | ||
+ | 00h base memory, no workspace buffer | ||
+ | 01h HMA, workspace buffer in base memory | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | UMBs are enabled???, else 0000h | ||
+ | | ||
+ | | ||
+ | | ||
+ | memory chain in base 640K only (first UMB MCB usually at 9FFFh, | ||
+ | locking out video memory with a DOS-owned memory block) | ||
+ | | ||
+ | |||
+ | Format of IFS driver list: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | call with ES:BX -> IFS request (see below) | ||
+ | | ||
+ | ??? | ||
+ | |||
+ | Call IFS utility function entry point with: | ||
+ | AH = 20h miscellaneous functions | ||
+ | AL = 00h get date | ||
+ | Return: CX = year | ||
+ | DH = month | ||
+ | DL = day | ||
+ | AL = 01h get process ID and computer ID | ||
+ | Return: BX = current PSP segment | ||
+ | DX = active network machine number | ||
+ | AL = 05h get file system info | ||
+ | ES:DI -> 16-byte info buffer | ||
+ | Return: buffer filled | ||
+ | Offset Size Description | ||
+ | 00h 2 BYTEs unused | ||
+ | 02h WORD number of SFTs (actually counts only | ||
+ | the first two file table arrays) | ||
+ | 04h WORD number of FCB table entries | ||
+ | 06h WORD number of proctected FCBs | ||
+ | 08h 6 BYTEs unused | ||
+ | 0Eh WORD largest sector size supported | ||
+ | AL = 06h get machine name | ||
+ | ES:DI -> 18-byte buffer for name | ||
+ | Return: buffer filled with name starting at offset 02h | ||
+ | AL = 08h get sharing retry count | ||
+ | Return: BX = sharing retry count | ||
+ | AL = other | ||
+ | Return: CF set | ||
+ | AH = 21h get redirection state | ||
+ | BH = type (03h disk, 04h printer) | ||
+ | Return: BH = state (00h off, 01h on) | ||
+ | AH = 22h ??? some sort of time calculation | ||
+ | AL = 00h ??? | ||
+ | nonzero ??? | ||
+ | AH = 23h ??? some sort of time calculation | ||
+ | AH = 24h compare filenames | ||
+ | DS:SI -> first ASCIZ filename | ||
+ | ES:DI -> second ASCIZ filename | ||
+ | Return: ZF set if files are same ignoring case and / vs \ | ||
+ | AH = 25h normalize filename | ||
+ | DS:SI -> ASCIZ filename | ||
+ | ES:DI -> buffer for result | ||
+ | Return: filename uppercased, forward slashes changed to backslashes | ||
+ | AH = 26h get DOS stack | ||
+ | Return: DS:SI -> top of stack | ||
+ | CX = size of stack in bytes | ||
+ | AH = 27h increment InDOS flag | ||
+ | AH = 28h decrement InDOS flag | ||
+ | Note: IFS drivers which do not wish to implement functions 20h or 24h-28h may | ||
+ | pass them on to the default handler pointed at by [LoL+37h] | ||
+ | |||
+ | Format of IFS request block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | 02h ??? | ||
+ | 03h redirection | ||
+ | 04h ??? | ||
+ | 05h file access | ||
+ | 06h convert error code to string | ||
+ | 07h ??? | ||
+ | | ||
+ | | ||
+ | 00h success | ||
+ | 01h ??? | ||
+ | 02h ??? | ||
+ | 03h ??? | ||
+ | 04h ??? | ||
+ | FFh internal failure | ||
+ | 06h 16 BYTEs ??? | ||
+ | ---request class 02h--- | ||
+ | | ||
+ | 04h ??? | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ---request class 03h--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ---request class 04h--- | ||
+ | | ||
+ | | ||
+ | ---request class 05h--- | ||
+ | | ||
+ | 01h flush disk buffers | ||
+ | 02h get disk space | ||
+ | 03h MKDIR | ||
+ | 04h RMDIR | ||
+ | 05h CHDIR | ||
+ | 06h delete file | ||
+ | 07h rename file | ||
+ | 08h search directory | ||
+ | 09h file open/create | ||
+ | 0Ah LSEEK | ||
+ | 0Bh read from file | ||
+ | 0Ch write to file | ||
+ | 0Dh lock region of file | ||
+ | 0Eh commit/ | ||
+ | 0Fh get/set file attributes | ||
+ | 10h printer control | ||
+ | 11h ??? | ||
+ | 12h process termination | ||
+ | 13h ??? | ||
+ | ---class 05h function 01h--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h 4 BYTEs ??? | ||
+ | 26h BYTE ??? | ||
+ | 27h BYTE ??? | ||
+ | ---class 05h function 02h--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h 4 BYTEs ??? | ||
+ | 26h WORD returned total clusters | ||
+ | 28h WORD returned sectors per cluster | ||
+ | 2Ah WORD returned bytes per sector | ||
+ | 2Ch WORD returned available clusters | ||
+ | 2Eh BYTE returned ??? | ||
+ | 2Fh BYTE ??? | ||
+ | ---class 05h functions 03h, | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h 4 BYTEs ??? | ||
+ | 26h DWORD pointer to directory name | ||
+ | ---class 05h function 06h--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h 4 BYTEs ??? | ||
+ | 26h WORD attribute mask | ||
+ | 28h DWORD pointer to filename | ||
+ | ---class 05h function 07h--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h 4 BYTEs ??? | ||
+ | 26h WORD attribute mask | ||
+ | 28h DWORD pointer to source filespec | ||
+ | 2Ch DWORD pointer to destination filespec | ||
+ | ---class 05h function 08h--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h 4 BYTEs ??? | ||
+ | 26h BYTE 00h FINDFIRST | ||
+ | 01h FINDNEXT | ||
+ | 28h DWORD pointer to FindFirst search data + 01h if FINDNEXT | ||
+ | 2Ch WORD search attribute if FINDFIRST | ||
+ | 2Eh DWORD pointer to filespec if FINDFIRST | ||
+ | ---class 05h function 09h--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h DWORD pointer to IFS open file structure (see below) | ||
+ | 26h WORD ??? | ||
+ | 28h WORD ??? | ||
+ | 2Ah 4 BYTEs ??? | ||
+ | 2Eh DWORD pointer to filename | ||
+ | 32h 4 BYTEs ??? | ||
+ | 36h WORD file attributes on call | ||
+ | returned ??? | ||
+ | 38h WORD returned ??? | ||
+ | ---class 05h function 0Ah--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h DWORD pointer to IFS open file structure (see below) | ||
+ | 26h BYTE seek type (02h = from end) | ||
+ | 28h DWORD offset on call | ||
+ | returned new absolute position | ||
+ | ---class 05h functions 0Bh,0Ch--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h DWORD pointer to IFS open file structure (see below) | ||
+ | 28h WORD number of bytes to transfer | ||
+ | returned bytes actually transferred | ||
+ | 2Ah DWORD transfer address | ||
+ | ---class 05h function 0Dh--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h DWORD pointer to IFS open file structure (see below) | ||
+ | 26h BYTE file handle??? | ||
+ | 27h BYTE unused??? | ||
+ | 28h WORD ??? | ||
+ | 2Ah WORD ??? | ||
+ | 2Ch WORD ??? | ||
+ | 2Eh WORD ??? | ||
+ | ---class 05h function 0Eh--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h DWORD pointer to IFS open file structure (see below) | ||
+ | 26h BYTE 00h commit file | ||
+ | 01h close file | ||
+ | 27h BYTE unused??? | ||
+ | ---class 05h function 0Fh--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h 4 BYTEs ??? | ||
+ | 26h BYTE 02h GET attributes | ||
+ | 03h PUT attributes | ||
+ | 27h BYTE unused??? | ||
+ | 28h 12 BYTEs ??? | ||
+ | 34h WORD search attributes??? | ||
+ | 36h DWORD pointer to filename | ||
+ | 3Ah WORD (GET) returned ??? | ||
+ | 3Ch WORD (GET) returned ??? | ||
+ | 3Eh WORD (GET) returned ??? | ||
+ | 40h WORD (GET) returned ??? | ||
+ | 42h WORD (PUT) new attributes | ||
+ | (GET) returned attributes | ||
+ | ---class 05h function 10h--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h DWORD pointer to IFS open file structure (see below) | ||
+ | 26h WORD ??? | ||
+ | 28h DWORD pointer to ??? | ||
+ | 2Ch WORD ??? | ||
+ | 2Eh BYTE ??? | ||
+ | 2Fh BYTE subfunction | ||
+ | 01h get printer setup | ||
+ | 03h ??? | ||
+ | 04h ??? | ||
+ | 05h ??? | ||
+ | 06h ??? | ||
+ | 07h ??? | ||
+ | 21h set printer setup | ||
+ | ---class 05h function 11h--- | ||
+ | 17h 7 BYTEs ??? | ||
+ | 1Eh DWORD pointer to ??? | ||
+ | 22h DWORD pointer to IFS open file structure (see below) | ||
+ | 26h BYTE subfunction | ||
+ | 27h BYTE unused??? | ||
+ | 28h WORD ??? | ||
+ | 2Ah WORD ??? | ||
+ | 2Ch WORD ??? | ||
+ | 2Eh BYTE ??? | ||
+ | 2Fh BYTE ??? | ||
+ | ---class 05h function 12h--- | ||
+ | 17h 15 BYTEs unused??? | ||
+ | 26h WORD PSP segment | ||
+ | 28h BYTE type of process termination | ||
+ | 29h BYTE unused??? | ||
+ | ---class 05h function 13h--- | ||
+ | 17h 15 BYTEs unused??? | ||
+ | 26h WORD PSP segment | ||
+ | ---request class 06h--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | ---request class 07h--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of IFS open file structure: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 1Ah 11 BYTEs filename in FCB format | ||
+ | | ||
+ | | ||
+ | (low word of linear address + segment& | ||
+ | | ||
+ | | ||
+ | |||
+ | Format of one item in DOS 4+ list of special program names: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | (see AH=30h,INT 2F/ | ||
+ | ---DOS 4 only--- | ||
+ | | ||
+ | Note: if the name of the executable for the program making the DOS "get | ||
+ | version" | ||
+ | specified version rather than the true version number | ||
+ | ----------215252----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = 5252h | ||
+ | Return: BX = FFEEh if resident | ||
+ | SeeAlso: AX=4BFFh" | ||
+ | ----------2153------------------------------- | ||
+ | INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK | ||
+ | AH = 53h | ||
+ | DS:SI -> BIOS Parameter Block (see below) | ||
+ | ES:BP -> buffer for Drive Parameter Block (see AH=32h for format) | ||
+ | Return: ES:BP buffer filled | ||
+ | Note: for DOS 3+, the cluster at which to start searching is set to 0000h | ||
+ | and the number of free clusters is set to FFFFh (unknown) | ||
+ | |||
+ | Format of BIOS Parameter Block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | for DOS 4+, set to zero if partition >32M, then set DWORD at | ||
+ | 15h to actual number of sectors | ||
+ | | ||
+ | | ||
+ | ---DOS 3+--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | 15h 11 BYTEs reserved | ||
+ | ---DOS 4+ --- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------2154------------------------------- | ||
+ | INT 21 - DOS 2+ - GET VERIFY FLAG | ||
+ | AH = 54h | ||
+ | Return: AL = verify flag | ||
+ | 00h off | ||
+ | 01h on (all disk writes verified after writing) | ||
+ | SeeAlso: AH=2Eh | ||
+ | ----------2155------------------------------- | ||
+ | INT 21 - DOS 2+ internal - CREATE CHILD PSP | ||
+ | AH = 55h | ||
+ | DX = segment at which to create new PSP | ||
+ | SI = (DOS 3+) value to place in memory size field at DX:[0002h] | ||
+ | Return: CF clear if successful | ||
+ | |||
+ | Notes: | ||
+ | PSP; the new PSP's parent pointer is set to the current PSP and the | ||
+ | reference count for each inherited file is incremented | ||
+ | (DOS 2+) sets current PSP to DX | ||
+ | (DOS 3+) marks "no inherit" | ||
+ | SeeAlso: AH=26h, | ||
+ | ----------2156------------------------------- | ||
+ | INT 21 - DOS 2+ - " | ||
+ | AH = 56h | ||
+ | DS:DX -> ASCIZ filename of existing file (no wildcards, but see below) | ||
+ | ES:DI -> ASCIZ new filename (no wildcards) | ||
+ | CL = attribute mask (server call only, see below) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (02h, | ||
+ | Notes: | ||
+ | does not set the archive attribute (see AX=4300h), which results in | ||
+ | incremental backups not backing up the file under its new name | ||
+ | open files should not be renamed | ||
+ | (DOS 3+) allows renaming of directories | ||
+ | (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case | ||
+ | error 12h (no more files) is returned on success, and both source and | ||
+ | destination specs must be canonical (as returned by AH=60h). | ||
+ | Wildcards in the destination are replaced by the corresponding char | ||
+ | of each source file being renamed. | ||
+ | if the destination wildcard is *.* or equivalent. | ||
+ | AX=5D00h, only those files matching the attribute mask in CL are | ||
+ | renamed. | ||
+ | SeeAlso: AH=17h, | ||
+ | ----------215700----------------------------- | ||
+ | INT 21 - DOS 2+ - GET FILE'S DATE AND TIME | ||
+ | AX = 5700h | ||
+ | BX = file handle | ||
+ | Return: CF clear if successful | ||
+ | CX = file's time | ||
+ | bits 15-11: hours (0-23) | ||
+ | | ||
+ | 4-0: seconds/2 | ||
+ | DX = file's date | ||
+ | bits 15-9: year - 1980 | ||
+ | 8-5: month | ||
+ | 4-0: day | ||
+ | CF set on error | ||
+ | AX = error code (01h,06h) (see AH=59h) | ||
+ | SeeAlso: AX=5701h | ||
+ | ----------215701----------------------------- | ||
+ | INT 21 - DOS 2+ - SET FILE'S DATE AND TIME | ||
+ | AX = 5701h | ||
+ | BX = file handle | ||
+ | CX = new time (see AX=5700h) | ||
+ | DX = new date (see AX=5700h) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (01h,06h) (see AH=59h) | ||
+ | SeeAlso: AX=5700h | ||
+ | ----------215702----------------------------- | ||
+ | INT 21 - DOS 4.x only - GET ??? | ||
+ | AX = 5702h | ||
+ | BX = ??? (0000h through 0004h) | ||
+ | DS:SI -> ??? | ||
+ | ES:DI -> result buffer | ||
+ | CX = size of result buffer | ||
+ | Return: CX = size of returned data | ||
+ | SeeAlso: AX=5703h, | ||
+ | ----------215703----------------------------- | ||
+ | INT 21 - DOS 4.x only - GET ??? | ||
+ | AX = 5703h | ||
+ | BX = file handle (only 0000h through 0004h valid) | ||
+ | DS:SI -> ??? passed through to INT 2F/AX=112Dh | ||
+ | ES:DI -> result buffer | ||
+ | CX = size of result buffer | ||
+ | Return: CX = size of returned data | ||
+ | ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry | ||
+ | SeeAlso: AX=5702h, | ||
+ | ----------215704----------------------------- | ||
+ | INT 21 - DOS 4.x only - TRUNCATE OPEN FILE TO ZERO LENGTH | ||
+ | AX = 5704h | ||
+ | BX = file handle (only 0000h through 0004h valid) | ||
+ | DS:SI -> ??? passed through to INT 2F/AX=112Dh | ||
+ | ES:DI -> result buffer | ||
+ | CX = size of result buffer | ||
+ | Return: CX = size of returned data | ||
+ | ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry | ||
+ | SeeAlso: AX=5702h, | ||
+ | ----------2158------------------------------- | ||
+ | INT 21 - DOS 3+ - GET OR SET MEMORY ALLOCATION STRATEGY | ||
+ | AH = 58h | ||
+ | AL = subfunction | ||
+ | 00h get allocation strategy | ||
+ | Return: AX = current strategy | ||
+ | 00h low memory first fit | ||
+ | 01h low memory best fit | ||
+ | 02h low memory last fit | ||
+ | ---DOS 5.0--- | ||
+ | 40h high memory first fit | ||
+ | 41h high memory best fit | ||
+ | 42h high memory last fit | ||
+ | 80h first fit, try high then low memory | ||
+ | 81h best fit, try high then low memory | ||
+ | 82h last fit, try high then low memory | ||
+ | 01h set allocation strategy | ||
+ | BL = new allocation strategy (see above) | ||
+ | BH = 0 (DOS 5.0) | ||
+ | 02h (DOS 5.0) get UMB link state | ||
+ | Return: AL = 00h UMBs not part of DOS memory chain | ||
+ | = 01h UMBs in DOS memory chain | ||
+ | 03h (DOS 5.0) set UMB link state | ||
+ | BX = 0000h remove UMBs from DOS memory chain | ||
+ | = 0001h add UMBs to DOS memory chain | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (01h) (see AH=59h) | ||
+ | Notes: the Set subfunction accepts any value in BL for DOS 3.x and 4.x; | ||
+ | 2 or greater means last fit | ||
+ | the Get subfunction returns the last value set | ||
+ | a program which changes the allocation strategy should restore it | ||
+ | before terminating | ||
+ | DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h | ||
+ | SeeAlso: AH=48h, | ||
+ | ----------2158CC----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = 58CCh | ||
+ | Return: CF clear if resident | ||
+ | SeeAlso: AX=5252h, | ||
+ | |||
+ | ===== 59h - DOS 3+ - GET EXTENDED ERROR INFORMATION ===== | ||
+ | < | ||
+ | AH = 59h | ||
+ | BX = 0000h | ||
+ | </ | ||
+ | < | ||
+ | Return: AX = extended error code (see below) | ||
+ | BH = error class (see below) | ||
+ | BL = recommended action (see below) | ||
+ | CH = error locus (see below) | ||
+ | CL, DX, SI, DI, BP, DS, and ES destroyed | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | functions available under DOS 2.x map the true DOS 3+ error code into one supported under DOS 2.x | ||
+ | |||
+ | you should call this function to retrieve the true error code when an FCB or DOS 2.x call returns an error | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AX=5D0Ah, | ||
+ | |||
+ | Values for extended error code: | ||
+ | | 00h |no error | | ||
+ | | 01h |function number invalid | ||
+ | | 02h |file not found | | ||
+ | | 03h |path not found | | ||
+ | | 04h |too many open files (no handles available) | ||
+ | | 05h |access denied | ||
+ | | 06h |invalid handle | ||
+ | | 07h |memory control block destroyed | ||
+ | | 08h |insufficient memory | ||
+ | | 09h |memory block address invalid | ||
+ | | 0Ah |environment invalid (usually >32K in length) | ||
+ | | 0Bh |format invalid | ||
+ | | 0Ch |access code invalid | ||
+ | | 0Dh |data invalid | ||
+ | | 0Eh |reserved | ||
+ | | 0Fh |invalid drive | | ||
+ | | 10h |attempted to remove current directory | ||
+ | | 11h |not same device | ||
+ | | 12h |no more files | | ||
+ | |---DOS 3+--- || | ||
+ | | 13h |disk write-protected | ||
+ | | 14h |unknown unit | | ||
+ | | 15h |drive not ready | | ||
+ | | 16h |unknown command | ||
+ | | 17h |data error (CRC) | | ||
+ | | 18h |bad request structure length | ||
+ | | 19h |seek error | | ||
+ | | 1Ah |unknown media type (non-DOS disk) | | ||
+ | | 1Bh |sector not found | | ||
+ | | 1Ch |printer out of paper | | ||
+ | | 1Dh |write fault | | ||
+ | | 1Eh |read fault | | ||
+ | | 1Fh |general failure | ||
+ | | 20h |sharing violation | ||
+ | | 21h |lock violation | ||
+ | | 22h |disk change invalid | ||
+ | | ::: |ES:DI -> ASCIZ volume label of required disk | | ||
+ | | 23h |FCB unavailable | ||
+ | | 24h |sharing buffer overflow | ||
+ | | 25h |(DOS 4+) code page mismatch | ||
+ | | 26h |(DOS 4+) cannot complete file operation (out of input) | ||
+ | | 27h |(DOS 4+) insufficient disk space | | ||
+ | | 28h-|31h reserved | ||
+ | | 32h |network request not supported | ||
+ | | 33h |remote computer not listening | ||
+ | | 34h |duplicate name on network | ||
+ | | 35h |network name not found | | ||
+ | | 36h |network busy | | ||
+ | | 37h |network device no longer exists | ||
+ | | 38h |network BIOS command limit exceeded | ||
+ | | 39h |network adapter hardware error | | ||
+ | | 3Ah |incorrect response from network | ||
+ | | 3Bh |unexpected network error | | ||
+ | | 3Ch |incompatible remote adapter | ||
+ | | 3Dh |print queue full | | ||
+ | | 3Eh |queue not full | | ||
+ | | 3Fh |not enough space to print file | | ||
+ | | 40h |network name was deleted | ||
+ | | 41h |network: Access denied | ||
+ | | 42h |network device type incorrect | ||
+ | | 43h |network name not found | | ||
+ | | 44h |network name limit exceeded | ||
+ | | 45h |network BIOS session limit exceeded | ||
+ | | 46h |temporarily paused | ||
+ | | 47h |network request not accepted | ||
+ | | 48h |network print/disk redirection paused | ||
+ | | 49h |(LANtastic) invalid network version | ||
+ | | 4Ah |(LANtastic) account expired | ||
+ | | 4Bh |(LANtastic) password expired | ||
+ | | 4Ch |(LANtastic) login attempt invalid at this time | | ||
+ | | 4Dh |(LANtastic v3+) disk limit exceeded on network node | | ||
+ | | 4Eh |(LANtastic v3+) not logged in to network node | | ||
+ | | 4Fh |reserved | ||
+ | | 50h |file exists | ||
+ | | 51h |reserved | ||
+ | | 52h |cannot make directory | ||
+ | | 53h |fail on INT 24h | | ||
+ | | 54h |(DOS 3.3+) too many redirections | ||
+ | | 55h |(DOS 3.3+) duplicate redirection | ||
+ | | 56h |(DOS 3.3+) invalid password | ||
+ | | 57h |(DOS 3.3+) invalid parameter | ||
+ | | 58h |(DOS 3.3+) network write fault | | ||
+ | | 59h |(DOS 4+) function not supported on network | ||
+ | | 5Ah |(DOS 4+) required system component not installed | ||
+ | |||
+ | Values for Error Class: | ||
+ | | 01h |out of resource (storage space or I/O channels) | ||
+ | | 02h |temporary situation (file or record lock) | | ||
+ | | 03h |authorization (denied access) | ||
+ | | 04h |internal (system software bug) | | ||
+ | | 05h |hardware failure | ||
+ | | 06h |system failure (configuration file missing or incorrect) | ||
+ | | 07h |application program error | | ||
+ | | 08h |not found | | ||
+ | | 09h |bad format | ||
+ | | 0Ah |locked | ||
+ | | 0Bh |media error | | ||
+ | | 0Ch |already exists | ||
+ | | 0Dh |unknown | ||
+ | |||
+ | Values for Suggested Action: | ||
+ | | 01h |retry | ||
+ | | 02h |delayed retry | | ||
+ | | 03h |prompt user to reenter input | | ||
+ | | 04h |abort after cleanup | ||
+ | | 05h |immediate abort | | ||
+ | | 06h |ignore | ||
+ | | 07h |retry after user intervention | ||
+ | |||
+ | Values for Error Locus: | ||
+ | | 01h |unknown or not appropriate | | ||
+ | | 02h |block device (disk error) | ||
+ | | 03h |network related | ||
+ | | 04h |serial device (timeout) | ||
+ | | 05h |memory related | ||
+ | |||
+ | ===== 5Ah - DOS 3+ - CREATE TEMPORARY FILE ===== | ||
+ | < | ||
+ | AH = 5Ah | ||
+ | CX = file attribute (see AX=4301h) | ||
+ | DS:DX -> ASCIZ path ending with a ' | ||
+ | generated filename | ||
+ | </ | ||
+ | </ | ||
+ | Return: CF clear if successful | ||
+ | AX = file handle opened for read/write in compatibility mode | ||
+ | DS:DX pathname extended with generated name for temporary file | ||
+ | CF set on error | ||
+ | AX = error code (03h, | ||
+ | </ | ||
+ | <WRAP round box> | ||
+ | creates a file with a unique name which must be explicitly deleted | ||
+ | |||
+ | COMPAQ DOS 3.31 hangs if the pathname is at XXXXh: | ||
+ | </ | ||
+ | |||
+ | SeeAlso: AH=3Ch, | ||
+ | |||
+ | ===== 5Bh- DOS 3+ - CREATE NEW FILE ===== | ||
+ | |||
+ | AH = 5Bh | ||
+ | CX = file attribute (see AX=4301h) | ||
+ | DS:DX -> ASCIZ filename | ||
+ | Return: CF clear if successful | ||
+ | AX = file handle opened for read/write in compatibility mode | ||
+ | CF set on error | ||
+ | AX = error code (03h, | ||
+ | Notes: | ||
+ | rather than truncating it; this permits its use in creating semaphore | ||
+ | files because it is an atomic "test and set" operation | ||
+ | SeeAlso: AH=3Ch, | ||
+ | ----------215C------------------------------- | ||
+ | INT 21 - DOS 3+ - " | ||
+ | AH = 5Ch | ||
+ | AL = subfunction | ||
+ | 00h lock region of file | ||
+ | 01h unlock region of file | ||
+ | BX = file handle | ||
+ | CX:DX = start offset of region within file | ||
+ | SI:DI = length of region in bytes | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Notes: | ||
+ | an unlock call must specify the same region as some prior lock call | ||
+ | locked regions become entirely inaccessible to other processes | ||
+ | duplicate handles created with AH=45h or AH=46h inherit locks, but | ||
+ | handles inherited by child processes (see AH=4Bh) do not | ||
+ | SeeAlso: AX=440Bh, | ||
+ | ----------215D00----------------------------- | ||
+ | INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL | ||
+ | AX = 5D00h | ||
+ | DS:DX -> DOS parameter list (see below) | ||
+ | DPL contains all register values for a call to INT 21h | ||
+ | Return: as appropriate for function being called | ||
+ | Notes: does not check AH. Out of range values will crash the system | ||
+ | executes using specified computer ID and process ID | ||
+ | sharing delay loops skipped | ||
+ | a special sharing mode is enabled | ||
+ | wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h) | ||
+ | an extra file attribute parameter is enabled for OPEN (AH=3Dh), | ||
+ | DELETE (AH=41h), and RENAME (AH=56h) | ||
+ | functions which take filenames require canonical names (as returned | ||
+ | by AH=60h); this is apparently to prevent multi-hop file forwarding | ||
+ | SeeAlso: AH=3Dh, | ||
+ | |||
+ | Format of DOS parameter list: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------215D01----------------------------- | ||
+ | INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/ | ||
+ | AX = 5D01h | ||
+ | DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and | ||
+ | process ID fields used | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | Notes: | ||
+ | been written to; if remote file, calls INT 2F/AX=1107h | ||
+ | the computer ID and process ID are stored but ignored under DOS 3.3 | ||
+ | SeeAlso: AH=0Dh, | ||
+ | ----------215D02----------------------------- | ||
+ | INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME | ||
+ | AX = 5D02h | ||
+ | DS:DX -> DOS parameter list (see AX=5D00h), only fields DX, DS, | ||
+ | computer ID, and process ID used | ||
+ | DPL's DS:DX -> ASCIZ name of file to close | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | Notes: | ||
+ | name must be canonical fully-qualified, | ||
+ | SeeAlso: AX=5D03h, | ||
+ | ----------215D03----------------------------- | ||
+ | INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER | ||
+ | AX = 5D03h | ||
+ | DS:DX -> DOS parameter list (see AX=5D00h), only computer ID used | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | Note: error unless SHARE is loaded (calls [SysFileTable-30h]) (see AH=52h) | ||
+ | SeeAlso: AX=5D02h, | ||
+ | ----------215D04----------------------------- | ||
+ | INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS | ||
+ | AX = 5D04h | ||
+ | DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and | ||
+ | process ID fields used | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | Note: error unless SHARE is loaded (calls [SysFileTable-2Ch]) (see AH=52h) | ||
+ | SeeAlso: AX=5D02h, | ||
+ | ----------215D05----------------------------- | ||
+ | INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY | ||
+ | AX = 5D05h | ||
+ | DS:DX -> DOS parameter list (see AX=5D00h) | ||
+ | DPL's BX = index of sharing record (see AH=52h) | ||
+ | DPL's CX = index of SFT in sharing record' | ||
+ | Return: CF clear if successful | ||
+ | ES:DI -> ASCIZ filename | ||
+ | BX = network machine number of SFT's owner | ||
+ | CX = number of locks held by SFT's owner | ||
+ | CF set if either index out of range | ||
+ | AX = 0012h (no more files) | ||
+ | Notes: | ||
+ | names are always canonical fully-qualified, | ||
+ | SeeAlso: AH=5Ch, | ||
+ | ----------215D06----------------------------- | ||
+ | INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA | ||
+ | AX = 5D06h | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | DS:SI -> nonreentrant data area (includes all three DOS stacks) | ||
+ | (critical error flag is first byte) | ||
+ | CX = size in bytes of area which must be swapped while in DOS | ||
+ | DX = size in bytes of area which must always be swapped | ||
+ | Notes: the Critical Error flag is used in conjunction with the InDOS flag | ||
+ | (see AH=34h) to determine when it is safe to enter DOS from a TSR | ||
+ | setting CritErr flag allows use of functions 50h/51h from INT 28h under | ||
+ | DOS 2.x by forcing use of correct stack | ||
+ | swapping the data area allows reentering DOS unless DOS is in a | ||
+ | critical section delimited by INT 2A/AH=80h and INT 2A/ | ||
+ | under DOS 4.0, AX=5D0Bh should be used instead of this function | ||
+ | SeeAlso: AX=5D0Bh, | ||
+ | |||
+ | Format of DOS 3.10-3.30 Swappable Data Area: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | with AH=4Dh) | ||
+ | | ||
+ | | ||
+ | ---remainder need only be swapped if in DOS--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | (set only during process termination) | ||
+ | 38h 26 BYTEs device driver request header | ||
+ | | ||
+ | 56h 22 BYTEs device driver request header | ||
+ | 6Ch 22 BYTEs device driver request header | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 92h 128 BYTEs buffer for filename | ||
+ | 112h 128 BYTEs buffer for filename | ||
+ | 192h 21 BYTEs findfirst/ | ||
+ | 1A7h 32 BYTEs directory entry for found file | ||
+ | 1C7h 81 BYTEs copy of current directory structure for drive being accessed | ||
+ | 218h 11 BYTEs FCB-format filename for device name comparison | ||
+ | 223h BYTE unused??? | ||
+ | 224h 11 BYTEs wildcard destination specification for rename (FCB format) | ||
+ | 22Fh 2 BYTEs ??? | ||
+ | 231h WORD ??? | ||
+ | 233h 5 BYTEs ??? | ||
+ | 238h BYTE extended FCB file attribute | ||
+ | 239h BYTE type of FCB (00h regular, FFh extended) | ||
+ | 23Ah BYTE directory search attributes | ||
+ | 23Bh BYTE file open mode??? | ||
+ | 23Ch BYTE ??? | ||
+ | 23Dh BYTE ??? | ||
+ | 23Eh BYTE ??? | ||
+ | 23Fh BYTE flag indicating how DOS function was invoked | ||
+ | (00h = direct INT 20/INT 21, FFh = server call AX=5D00h) | ||
+ | 240h BYTE ??? | ||
+ | 241h BYTE ??? | ||
+ | 242h BYTE flag: | ||
+ | 243h BYTE drive number for ??? | ||
+ | 244h BYTE ??? | ||
+ | 245h BYTE ??? | ||
+ | 246h BYTE line edit (AH=0Ah) insert mode flag (nonzero = on) | ||
+ | 247h BYTE canonicalized filename referred to existing file/dir if FFh | ||
+ | 248h BYTE ??? | ||
+ | 249h BYTE type of process termination (00h-03h) (see AH=4Dh) | ||
+ | 24Ah BYTE ??? | ||
+ | 24Bh BYTE value with which to replace first byte of deleted file's name | ||
+ | (normally E5h, but 00h as described under INT 21/AH=13h) | ||
+ | 24Ch DWORD pointer to Drive Parameter Block for critical error invocation | ||
+ | 250h DWORD pointer to stack frame containing user registers on INT 21 | ||
+ | 254h WORD stores SP across INT 24 | ||
+ | 256h DWORD pointer to DOS Drive Parameter Block for ??? | ||
+ | 25Ah WORD ??? | ||
+ | 25Ch WORD ??? | ||
+ | 25Eh WORD ??? | ||
+ | 260h WORD ??? | ||
+ | 262h BYTE Media ID byte returned by AH=1Bh,1Ch | ||
+ | 263h BYTE ??? | ||
+ | 264h DWORD pointer to device header | ||
+ | 268h DWORD pointer to current SFT | ||
+ | 26Ch DWORD pointer to current directory structure for drive being accessed | ||
+ | 270h DWORD pointer to caller' | ||
+ | 274h WORD number of SFT to which file being opened will refer | ||
+ | 276h WORD temporary storage for file handle | ||
+ | 278h DWORD pointer to a JFT entry in process handle table (see AH=26h) | ||
+ | 27Ch WORD offset in DOS DS of first filename argument | ||
+ | 27Eh WORD offset in DOS DS of second filename argument | ||
+ | 280h WORD offset of last component in pathname or FFFFh | ||
+ | 282h WORD ??? | ||
+ | 284h WORD ??? | ||
+ | 286h WORD ??? | ||
+ | 288h WORD ??? | ||
+ | 28Ah WORD ??? | ||
+ | 28Ch WORD ??? | ||
+ | 28Eh 2 BYTEs ??? | ||
+ | 290h WORD ??? | ||
+ | 292h DWORD current offset in file | ||
+ | 296h WORD ??? | ||
+ | 298h WORD ??? | ||
+ | 29Ah WORD ??? | ||
+ | 29Ch WORD ??? | ||
+ | 29Eh WORD ??? | ||
+ | 2A0h WORD ??? | ||
+ | 2A2h DWORD number of bytes appended to file | ||
+ | 2A6h DWORD pointer to ??? disk buffer | ||
+ | 2AAh DWORD pointer to working SFT | ||
+ | 2AEh WORD used by INT 21 dispatcher to store caller' | ||
+ | 2B0h WORD used by INT 21 dispatcher to store caller' | ||
+ | 2B2h WORD temporary storage while saving/ | ||
+ | 2B4h DWORD pointer to prev call frame (offset 250h) if INT 21 reentered | ||
+ | also switched to for duration of INT 24 | ||
+ | 2B8h 21 BYTEs FindFirst search data for source file(s) of a rename operation | ||
+ | (see AH=4Eh) | ||
+ | 2CDh 32 BYTEs directory entry for file being renamed | ||
+ | 2EDh 331 BYTEs critical error stack | ||
+ | 403h 35 BYTEs scratch SFT | ||
+ | 438h 384 BYTEs disk stack (functions greater than 0Ch, INT 25,INT 26) | ||
+ | 5B8h 384 BYTEs character I/O stack (functions 01h through 0Ch) | ||
+ | ---DOS 3.2,3.3 only--- | ||
+ | 738h BYTE device driver lookahead flag (see AH=64h) | ||
+ | 739h BYTE ??? | ||
+ | 73Ah BYTE ??? | ||
+ | 73Ah BYTE ??? | ||
+ | ----------215D07----------------------------- | ||
+ | INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE | ||
+ | AX = 5D07h | ||
+ | Return: DL = mode | ||
+ | 00h redirected output is combined | ||
+ | 01h redirected output in separate print jobs | ||
+ | SeeAlso: AX=5D08h, | ||
+ | ----------215D08----------------------------- | ||
+ | INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE | ||
+ | AX = 5D08h | ||
+ | DL = mode | ||
+ | 00h redirected output is combined | ||
+ | 01h redirected output placed in separate jobs, start new print job | ||
+ | now | ||
+ | SeeAlso: AX=5D07h, | ||
+ | ----------215D09----------------------------- | ||
+ | INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT | ||
+ | AX = 5D09h | ||
+ | Note: | ||
+ | job | ||
+ | SeeAlso: AX=5D07h, | ||
+ | ----------215D0A----------------------------- | ||
+ | INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION | ||
+ | AX = 5D0Ah | ||
+ | DS:DX -> 11-word DOS parameter list (see AX=5D00h) | ||
+ | Return: nothing. | ||
+ | DX,DI, and ES in corresponding registers | ||
+ | Note: | ||
+ | SeeAlso: AH=59h | ||
+ | ----------215D0B----------------------------- | ||
+ | INT 21 U - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS | ||
+ | AX = 5D0Bh | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | DS:SI -> swappable data area list (see below) | ||
+ | Note: | ||
+ | reentered unless it is in a critical section delimited by calls to | ||
+ | INT 2A/AH=80h and INT 2A/ | ||
+ | SeeAlso: AX=5D06h, | ||
+ | |||
+ | Format of DOS 4.x swappable data area list: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | Offset Size Description | ||
+ | 00h DWORD address | ||
+ | 04h WORD length and type | ||
+ | bit 15 set if swap always, clear if swap in DOS | ||
+ | bits 14-0: length in bytes | ||
+ | |||
+ | Format of DOS 4.0-5.0 swappable data area: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | with AH=4Dh) | ||
+ | | ||
+ | | ||
+ | | ||
+ | ---remainder need only be swapped if in DOS--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 38h 30 BYTEs device driver request header | ||
+ | | ||
+ | 5Ch 22 BYTEs device driver request header | ||
+ | 72h 30 BYTEs device driver request header | ||
+ | | ||
+ | | ||
+ | | ||
+ | 9Eh 128 BYTEs buffer for filename | ||
+ | 11Eh 128 BYTEs buffer for filename | ||
+ | 19Eh 21 BYTEs findfirst/ | ||
+ | 1B3h 32 BYTEs directory entry for found file | ||
+ | 1D3h 88 BYTEs copy of current directory structure for drive being accessed | ||
+ | 22Bh 11 BYTEs FCB-format filename for device name comparison | ||
+ | 236h BYTE ??? | ||
+ | 237h 11 BYTEs wildcard destination specification for rename (FCB format) | ||
+ | 242h 2 BYTEs ??? | ||
+ | 244h WORD ??? | ||
+ | 246h 5 BYTEs ??? | ||
+ | 24Bh BYTE extended FCB file attributes | ||
+ | 24Ch BYTE type of FCB (00h regular, FFh extended) | ||
+ | 24Dh BYTE directory search attributes | ||
+ | 24Eh BYTE file open mode | ||
+ | 24Fh BYTE ??? | ||
+ | 250h BYTE ??? | ||
+ | 251h BYTE ??? | ||
+ | 252h BYTE flag indicating how DOS function was invoked | ||
+ | (00h = direct INT 20/INT 21, FFh = server call AX=5D00h) | ||
+ | 253h BYTE ??? | ||
+ | 254h BYTE ??? | ||
+ | 255h BYTE ??? | ||
+ | 256h BYTE ??? | ||
+ | 257h BYTE ??? | ||
+ | 258h BYTE ??? | ||
+ | 259h BYTE ??? | ||
+ | 25Ah BYTE canonicalized filename referred to existing file/dir if FFh | ||
+ | 25Bh BYTE ??? | ||
+ | 25Ch BYTE type of process termination (00h-03h) | ||
+ | 25Dh BYTE ??? | ||
+ | 25Eh BYTE ??? | ||
+ | 25Fh BYTE ??? | ||
+ | 260h DWORD pointer to Drive Parameter Block for critical error invocation | ||
+ | 264h DWORD pointer to stack frame containing user registers on INT 21 | ||
+ | 268h WORD stores SP??? | ||
+ | 26Ah DWORD pointer to DOS Drive Parameter Block for ??? | ||
+ | 26Eh WORD segment of disk buffer | ||
+ | 270h WORD ??? | ||
+ | 272h WORD ??? | ||
+ | 274h WORD ??? | ||
+ | 276h WORD ??? | ||
+ | 278h BYTE Media ID byte returned by AH=1Bh,1Ch | ||
+ | 279h BYTE ??? | ||
+ | 27Ah DWORD pointer to ??? | ||
+ | 27Eh DWORD pointer to current SFT | ||
+ | 282h DWORD pointer to current directory structure for drive being accessed | ||
+ | 286h DWORD pointer to caller' | ||
+ | 28Ah WORD number of SFT to which file being opened will refer | ||
+ | 28Ch WORD temporary storage for file handle | ||
+ | 28Eh DWORD pointer to a JFT entry in process handle table (see AH=26h) | ||
+ | 292h WORD offset in DOS DS of first filename argument | ||
+ | 294h WORD offset in DOS DS of second filename argument | ||
+ | 296h WORD ??? | ||
+ | 298h WORD ??? | ||
+ | 29Ah WORD ??? | ||
+ | 29Ch WORD ??? | ||
+ | 29Eh WORD ??? | ||
+ | 2A0h WORD ??? | ||
+ | 2A2h WORD ??? | ||
+ | 2A4h DWORD ??? | ||
+ | 2A8h DWORD ??? | ||
+ | 2ACh WORD ??? | ||
+ | 2AEh DWORD offset in file??? | ||
+ | 2B2h WORD ??? | ||
+ | 2B4h WORD bytes in partial sector | ||
+ | 2B6h WORD number of sectors | ||
+ | 2B8h WORD ??? | ||
+ | 2BAh WORD ??? | ||
+ | 2BCh WORD ??? | ||
+ | 2BEh DWORD number of bytes appended to file | ||
+ | 2C2h DWORD pointer to ??? disk buffer | ||
+ | 2C6h DWORD pointer to ??? SFT | ||
+ | 2CAh WORD used by INT 21 dispatcher to store caller' | ||
+ | 2CCh WORD used by INT 21 dispatcher to store caller' | ||
+ | 2CEh WORD temporary storage while saving/ | ||
+ | 2D0h DWORD pointer to prev call frame (offset 264h) if INT 21 reentered | ||
+ | also switched to for duration of INT 24 | ||
+ | 2D4h WORD open mode/action for INT 21/AX=6C00h | ||
+ | 2D6h BYTE ??? | ||
+ | performed, | ||
+ | 2D7h WORD ??? | ||
+ | 2D9h DWORD stored ES:DI for AX=6C00h | ||
+ | 2DDh WORD extended file open action code (see AX=6C00h) | ||
+ | 2DFh WORD extended file open attributes (see AX=6C00h) | ||
+ | 2E1h WORD extended file open file mode (see AX=6C00h) | ||
+ | 2E3h DWORD pointer to filename to open (see AX=6C00h) | ||
+ | 2E7h WORD ??? | ||
+ | 2E9h WORD ??? | ||
+ | 2EBh BYTE ??? | ||
+ | 2ECh WORD stores DS during call to [List-of-Lists + 37h] | ||
+ | 2EEh WORD ??? | ||
+ | 2F0h BYTE ??? | ||
+ | 2F1h WORD ??? | ||
+ | 2F3h DWORD pointer to user-supplied filename | ||
+ | 2F7h DWORD pointer to ??? | ||
+ | 2FBh WORD stores SS during call to [List-of-Lists + 37h] | ||
+ | 2FDh WORD stores SP during call to [List-of-Lists + 37h] | ||
+ | 2FFh BYTE flag, | ||
+ | 300h 21 BYTEs FindFirst search data for source file(s) of a rename operation | ||
+ | (see AH=4Eh) | ||
+ | 315h 32 BYTEs directory entry for file being renamed | ||
+ | 335h 331 BYTEs critical error stack | ||
+ | 480h 384 BYTEs disk stack (functions greater than 0Ch, INT 25,INT 26) | ||
+ | 600h 384 BYTEs character I/O stack (functions 01h through 0Ch) | ||
+ | 780h BYTE device driver lookahead flag (see AH=64h) | ||
+ | 781h BYTE ??? | ||
+ | 782h BYTE ??? | ||
+ | 783h BYTE ??? | ||
+ | 784h WORD ??? | ||
+ | 786h WORD ??? | ||
+ | 788h WORD ??? | ||
+ | 78Ah WORD ??? | ||
+ | ----------215E00----------------------------- | ||
+ | INT 21 - DOS 3.1+ network - GET MACHINE NAME | ||
+ | AX = 5E00h | ||
+ | DS:DX -> 16-byte buffer for ASCIZ machine name | ||
+ | Return: CF clear if successful | ||
+ | CH = validity | ||
+ | 00h name invalid | ||
+ | nonzero valid | ||
+ | CL = NetBIOS number for machine name | ||
+ | DS:DX buffer filled with blank-paded name | ||
+ | CF set on error | ||
+ | AX = error code (01h) (see AH=59h) | ||
+ | Note: | ||
+ | SeeAlso: AX=5E01h | ||
+ | ----------215E01CH00------------------------- | ||
+ | INT 21 - DOS 3.1+ network - SET MACHINE NAME | ||
+ | AX = 5E01h | ||
+ | CH = 00h undefine name (make it invalid) | ||
+ | <> | ||
+ | CL = name number | ||
+ | DS:DX -> 15-character blank-padded ASCIZ name | ||
+ | SeeAlso: AX=5E00h | ||
+ | ----------215E02----------------------------- | ||
+ | INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING | ||
+ | AX = 5E02h | ||
+ | BX = redirection list index (see AX=5F02h) | ||
+ | CX = length of setup string | ||
+ | DS:SI -> setup string | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (01h) (see AH=59h) | ||
+ | SeeAlso: AX=5E03h, | ||
+ | ----------215E03----------------------------- | ||
+ | INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING | ||
+ | AX = 5E03h | ||
+ | BX = redirection list index (see AX=5F02h) | ||
+ | ES:DI -> 64-byte buffer for setup string | ||
+ | Return: CF clear if successful | ||
+ | CX = length of setup string | ||
+ | ES:DI buffer filled | ||
+ | CF set on error | ||
+ | AX = error code (01h) (see AH=59h) | ||
+ | SeeAlso: AX=5E02h, | ||
+ | ----------215E04----------------------------- | ||
+ | INT 21 - DOS 3.1+ network - SET PRINTER MODE | ||
+ | AX = 5E04h | ||
+ | BX = redirection list index (see AX=5F02h) | ||
+ | DX = mode | ||
+ | bit 0: set if binary, clear if text (tabs expanded to blanks) | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | Note: calls INT 2F/AX=111Fh with 5E04h on stack | ||
+ | SeeAlso: AX=5E05h, | ||
+ | ----------215E05----------------------------- | ||
+ | INT 21 - DOS 3.1+ network - GET PRINTER MODE | ||
+ | AX = 5E05h | ||
+ | BX = redirection list index (see AX=5F02h) | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | DX = printer mode (see AX=5E04h) | ||
+ | Note: calls INT 2F/AX=111Fh with 5E05h on stack | ||
+ | SeeAlso: AX=5E04h, | ||
+ | ----------215F00----------------------------- | ||
+ | INT 21 - DOS 3.1+ network - GET REDIRECTION MODE | ||
+ | AX = 5F00h | ||
+ | BL = redirection type | ||
+ | 03h printer | ||
+ | 04h disk drive | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | BH = redirection state | ||
+ | 00h off | ||
+ | 01h on | ||
+ | SeeAlso: AX=5F01h | ||
+ | ----------215F01----------------------------- | ||
+ | INT 21 - DOS 3.1+ network - SET REDIRECTION MODE | ||
+ | AX = 5F01h | ||
+ | BL = redirection type | ||
+ | 03h printer | ||
+ | 04h disk drive | ||
+ | BH = redirection state | ||
+ | 00h off | ||
+ | 01h on | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | Note: when redirection is off, the local device (if any) rather than the | ||
+ | remote device is used | ||
+ | SeeAlso: AX=5F00h, | ||
+ | ----------215F02----------------------------- | ||
+ | INT 21 - DOS 3.1+ network, Banyan VINES, PC-NFS - GET REDIRECTION LIST ENTRY | ||
+ | AX = 5F02h | ||
+ | BX = redirection list index | ||
+ | CX = 0000h (LANtastic) | ||
+ | DS:SI -> 16-byte buffer for ASCIZ device name | ||
+ | ES:DI -> 128-byte buffer for ASCIZ network name | ||
+ | Return: CF clear if successful | ||
+ | BH = device status | ||
+ | 00h valid | ||
+ | 01h invalid | ||
+ | BL = device type | ||
+ | 03h printer | ||
+ | 04h disk drive | ||
+ | CX = user data previously set with AX=5F03h | ||
+ | DS:SI and ES:DI buffers filled | ||
+ | DX,BP destroyed | ||
+ | CF set on error | ||
+ | AX = error code (01h,12h) (see AH=59h) | ||
+ | Notes: this function is passed through to INT 2F/AX=111Eh | ||
+ | error code 12h is returned if BX is greater than the size of the list | ||
+ | also supported by Banyan VINES, PC-NFS, and LANtastic | ||
+ | SeeAlso: AX=5F03h, | ||
+ | ----------215F03----------------------------- | ||
+ | INT 21 - DOS 3.1+ network, Banyan VINES, LANtastic - REDIRECT DEVICE | ||
+ | AX = 5F03h | ||
+ | BL = device type | ||
+ | 03h printer | ||
+ | 04h disk drive | ||
+ | CX = user data to save | ||
+ | 0000h for LANtastic | ||
+ | DS:SI -> ASCIZ local device name (16 bytes max) | ||
+ | ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: if device type is disk drive, DS:SI must point at either a null string | ||
+ | or a string consisting the drive letter followed by a colon; if a | ||
+ | null string, the network attempts to access the destination without | ||
+ | redirecting a local drive | ||
+ | SeeAlso: AX=5F02h, | ||
+ | ----------215F04----------------------------- | ||
+ | INT 21 - DOS 3.1+ network, Banyan VINES, LANtastic - CANCEL REDIRECTION | ||
+ | AX = 5F04h | ||
+ | DS:SI -> ASCIZ device name or path | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (01h, | ||
+ | Note: the DS:SI string must be either a local device name, a drive letter | ||
+ | followed by a colon, or a network directory beginning with two | ||
+ | backslashes | ||
+ | SeeAlso: AX=5F03h, | ||
+ | ----------215F05----------------------------- | ||
+ | INT 21 - DOS 4.x + Microsoft Networks - GET REDIRECTION LIST EXTENDED ENTRY | ||
+ | AX = 5F05h | ||
+ | BX = redirection list index | ||
+ | DS:SI -> buffer for ASCIZ source device name | ||
+ | ES:DI -> buffer for destination ASCIZ network path | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | BH = device status flag (bit 0 clear if valid) | ||
+ | BL = device type (03h if printer, 04h if drive) | ||
+ | CX = stored parameter value (user data) | ||
+ | BP = NETBIOS local session number | ||
+ | DS:SI buffer filled | ||
+ | ES:DI buffer filled | ||
+ | Notes: the local session number allows sharing the redirector' | ||
+ | if an error is caused on the NETBIOS LSN, the redirector may be unable | ||
+ | to correctly recover from errors | ||
+ | SeeAlso: AX=5F06h" | ||
+ | ----------215F05----------------------------- | ||
+ | INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM | ||
+ | AX = 5F05h | ||
+ | DL = drive number (0=A:) | ||
+ | DS:SI -> ASCIZ name of the object to map the drive to | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | SeeAlso: AX=5F06h" | ||
+ | ----------215F06----------------------------- | ||
+ | INT 21 U - Network - GET REDIRECTION LIST??? | ||
+ | AX = 5F06h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AX=5F05h" | ||
+ | ----------215F06----------------------------- | ||
+ | INT 21 - STARLITE architecture - UNMAP DRIVE LETTER | ||
+ | AX = 5F06h | ||
+ | DL = drive to be unmapped (0=A:) | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | SeeAlso: AX=5F05h" | ||
+ | ----------215F07----------------------------- | ||
+ | INT 21 - DOS 5.0 - ENABLE DRIVE | ||
+ | AX = 5F07h | ||
+ | DL = drive number (0=A:) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (0Fh) (see AH=59h) | ||
+ | Note: | ||
+ | SeeAlso: AH=52h, | ||
+ | ----------215F07----------------------------- | ||
+ | INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK | ||
+ | AX = 5F07h | ||
+ | DS:SI -> ASCIZ name of object to offer to network | ||
+ | ES:DI -> ASCIZ name under which object will be known on the network | ||
+ | MUST begin with three slashes | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | SeeAlso: AX=5F08h" | ||
+ | ----------215F08----------------------------- | ||
+ | INT 21 - DOS 5.0 - DISABLE DRIVE | ||
+ | AX = 5F08h | ||
+ | DL = drive number (0=A:) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (0Fh) (see AH=59h) | ||
+ | Note: | ||
+ | SeeAlso: AH=52h, | ||
+ | ----------215F08----------------------------- | ||
+ | INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT | ||
+ | AX = 5F08h | ||
+ | DS:SI -> ASCIZ network name (not local name) of object to unshare | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | SeeAlso: AX=5F07h" | ||
+ | ----------215F09----------------------------- | ||
+ | INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE | ||
+ | AX = 5F09h | ||
+ | DS:DX -> ASCIZ name of the device driver to attach to | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | Note: the STARLITE distributed file system can attach to multiple networks | ||
+ | simultaneously | ||
+ | SeeAlso: AX=5F0Ah | ||
+ | ----------215F0A----------------------------- | ||
+ | INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE | ||
+ | AX = 5F0Ah | ||
+ | DS:DX -> ASCIZ name of device driver to detach from | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | SeeAlso: AX=5F09h | ||
+ | ----------215F32----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPipeInfo | ||
+ | AX = 5F32h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F33h, | ||
+ | ----------215F33----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosQNmPHandState | ||
+ | AX = 5F33h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F32h, | ||
+ | ----------215F34----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosSetNmPHandState | ||
+ | AX = 5F34h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F32h, | ||
+ | ----------215F35----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekNmPipe | ||
+ | AX = 5F35h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F38h, | ||
+ | ----------215F36----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosTransactNmPipe | ||
+ | AX = 5F36h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F34h, | ||
+ | ----------215F37----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosCallNmPipe | ||
+ | AX = 5F37h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F36h, | ||
+ | ----------215F38----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosWaitNmPipe | ||
+ | AX = 5F38h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F37h, | ||
+ | ----------215F39----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosRawReadNmPipe | ||
+ | AX = 5F39h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F35h, | ||
+ | ----------215F3A----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosRawWriteNmPipe | ||
+ | AX = 5F3Ah | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F3Bh, | ||
+ | ----------215F3B----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleSetInfo | ||
+ | AX = 5F3Bh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F3Ch | ||
+ | ----------215F3C----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetHandleGetInfo | ||
+ | AX = 5F3Ch | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F3Bh | ||
+ | ----------215F40----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetMessageBufferSend | ||
+ | AX = 5F40h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------215F42----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetServiceControl | ||
+ | AX = 5F42h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------215F44----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaGetInfo | ||
+ | AX = 5F44h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F45h, | ||
+ | ----------215F45----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetWkstaSetInfo | ||
+ | AX = 5F45h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F44h | ||
+ | ----------215F46----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetUseEnum | ||
+ | AX = 5F46h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F47h, | ||
+ | ----------215F47----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetUseAdd | ||
+ | AX = 5F47h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F46h, | ||
+ | ----------215F48----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetUseDel | ||
+ | AX = 5F48h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F46h, | ||
+ | ----------215F49----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetUseGetInfo | ||
+ | AX = 5F49h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F44h, | ||
+ | ----------215F4A----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteCopy | ||
+ | AX = 5F4Ah | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F4Bh | ||
+ | ----------215F4B----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetRemoteMove | ||
+ | AX = 5F4Bh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F4Ah | ||
+ | ----------215F4C----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum | ||
+ | AX = 5F4Ch | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F53h | ||
+ | ----------215F4D----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosMakeMailslot | ||
+ | AX = 5F4Dh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F4Eh, | ||
+ | ----------215F4E----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosDeleteMailslot | ||
+ | AX = 5F4Eh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F4Dh, | ||
+ | ----------215F4F----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosMailslotInfo | ||
+ | AX = 5F4Fh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F4Dh, | ||
+ | ----------215F50----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosReadMailslot | ||
+ | AX = 5F50h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F4Dh, | ||
+ | ----------215F51----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosPeekMailslot | ||
+ | AX = 5F51h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F35h, | ||
+ | ----------215F52----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - DosWriteMailslot | ||
+ | AX = 5F52h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F4Fh, | ||
+ | ----------215F53----------------------------- | ||
+ | INT 21 - LAN Manager Enhanced DOS API local interface - NetServerEnum2 | ||
+ | AX = 5F53h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=5F4Ch | ||
+ | ----------215F80----------------------------- | ||
+ | INT 21 - LANtastic - GET LOGIN ENTRY | ||
+ | AX = 5F80h | ||
+ | BX = login entry index (0-based) | ||
+ | ES:DI -> 16-byte buffer for machine name | ||
+ | Return: CF clear if successful | ||
+ | buffer filled with machine name (" | ||
+ | DL = adapter number (v3+) | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: the login entry index corresponds to the value BX used in AX=5F83h | ||
+ | SeeAlso: AX=58F3h | ||
+ | ----------215F81----------------------------- | ||
+ | INT 21 - LANtastic - LOGIN TO SERVER | ||
+ | AX = 5F81h | ||
+ | ES:DI -> ASCIZ login path followed immediately by ASCIZ password | ||
+ | BL = adapter number | ||
+ | FFh try all valid adapters | ||
+ | 00h-07h try only specified adapter | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Notes: | ||
+ | if no password is used, the string at ES:DI must be terminated with | ||
+ | three NULs for compatibility with LANtastic v3.0. | ||
+ | SeeAlso: AX=5F82h, | ||
+ | ----------215F82----------------------------- | ||
+ | INT 21 - LANtastic - LOGOUT FROM SERVER | ||
+ | AX = 5F82h | ||
+ | ES:DI -> ASCIZ server name (in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | SeeAlso: AX=5F81h, | ||
+ | ----------215F83----------------------------- | ||
+ | INT 21 - LANtastic - GET USERNAME ENTRY | ||
+ | AX = 5F83h | ||
+ | BX = login entry index (0-based) | ||
+ | ES:DI -> 16-byte buffer for username currently logged into | ||
+ | Return: CF clear if successful | ||
+ | DL = adapter number (v3+) | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: the login entry index corresponds to the value BX used in AX=5F80h | ||
+ | SeeAlso: AX=5F80h | ||
+ | ----------215F84----------------------------- | ||
+ | INT 21 - LANtastic - GET INACTIVE SERVER ENTRY | ||
+ | AX = 5F84h | ||
+ | BX = server index not currently logged into | ||
+ | ES:DI -> 16-byte buffer for server name which is available for logging | ||
+ | in to (" | ||
+ | Return: CF clear if successful | ||
+ | DL = adapter number to non-logged in server is on | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | SeeAlso: AX=5F81h | ||
+ | ----------215F85----------------------------- | ||
+ | INT 21 - LANtastic - CHANGE PASSWORD | ||
+ | AX = 5F85h | ||
+ | ES:DI -> buffer containing " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Notes: must be logged into the named machine | ||
+ | this function is illegal for group accounts | ||
+ | ----------215F86----------------------------- | ||
+ | INT 21 - LANtastic - DISABLE ACCOUNT | ||
+ | AX = 5F86h | ||
+ | ES:DI -> ASCIZ machine name and password in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: must be logged into the named machine and concurrent logins set to 1 | ||
+ | by NET_MGR. | ||
+ | ----------215F87----------------------------- | ||
+ | INT 21 - LANtastic v3+ - GET ACCOUNT | ||
+ | AX = 5F87h | ||
+ | DS:SI -> 128-byte buffer for account information (see below) | ||
+ | ES:DI -> ASCIZ machine name in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | BX destroyed | ||
+ | Note: must be logged into the specified machine | ||
+ | |||
+ | Format of user account structure: | ||
+ | Offset Size Description | ||
+ | 00h 16 BYTEs blank-padded username (zero-padded for v4.x) | ||
+ | 10h 16 BYTEs reserved (00h) | ||
+ | 20h 32 BYTEs user description | ||
+ | | ||
+ | bit 7: bypass access control lists | ||
+ | 6: bypass queue protection | ||
+ | 5: treat as local process | ||
+ | 4: bypass mail protection | ||
+ | 3: allow audit entry creation | ||
+ | 2: system manager | ||
+ | 0: user cannot change password | ||
+ | | ||
+ | 42h 42 BYTEs bit map for disallowed half hours, beginning on Sunday | ||
+ | (bit set if half-hour not an allowed time) | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 00h if no extension required | ||
+ | ---v3.x--- | ||
+ | | ||
+ | ---v4.x--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------215F88----------------------------- | ||
+ | INT 21 - LANtastic v4.0+ - LOGOUT FROM ALL SERVERS | ||
+ | AX = 5F88h | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | SeeAlso: AX=5F82h | ||
+ | ----------215F97----------------------------- | ||
+ | INT 21 - LANtastic - COPY FILE | ||
+ | AX = 5F97h | ||
+ | CX:DX = number of bytes to copy (FFFFFFFFh = entire file) | ||
+ | SI = source file handle | ||
+ | DI = destination file handle | ||
+ | Return: CF clear if successful | ||
+ | DX:AX = number of bytes copied | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: copy is performed by server | ||
+ | ----------215F98----------------------------- | ||
+ | INT 21 - LANtastic - SEND UNSOLICITED MESSAGE | ||
+ | AX = 5F98h | ||
+ | DS:SI -> message buffer (see below) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: v4.1- return no errors | ||
+ | SeeAlso: AX=5F99h | ||
+ | |||
+ | Format of message buffer: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | 00h general | ||
+ | 01h server warning | ||
+ | 02h-7Fh reserved | ||
+ | 80h-FFh user-defined | ||
+ | 02h 16 BYTEs ASCIZ destination machine name | ||
+ | 12h 16 BYTEs ASCIZ server name which user must be logged into | ||
+ | 22h 16 BYTEs ASCIZ user name | ||
+ | 32h 16 BYTEs ASCIZ originating machine name (filled in when received) | ||
+ | 42h 80 BYTEs message text | ||
+ | ----------215F99----------------------------- | ||
+ | INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE | ||
+ | AX = 5F99h | ||
+ | ES:DI -> messsage buffer (see AX=5F98h for format) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | SeeAlso: AX=5F98h | ||
+ | ----------215F9A----------------------------- | ||
+ | INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS | ||
+ | AX = 5F9Ah | ||
+ | Return: CF clear if successful | ||
+ | DL = bits describing processing for received unsolicited messages | ||
+ | bit 0: beep before message is delivered | ||
+ | 1: deliver message to message service | ||
+ | 2: pop up message automatically (v3+) | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | SeeAlso: AX=5F9Bh, | ||
+ | ----------215F9B----------------------------- | ||
+ | INT 21 - LANtastic - SET MESSAGE PROCESSING FLAG | ||
+ | AX = 5F9Bh | ||
+ | DL = bits describing processing for received unsolicited messages | ||
+ | (see AX=5F9Ah) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | SeeAlso: AX=5F9Ah, | ||
+ | ----------215F9C----------------------------- | ||
+ | INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE | ||
+ | AX = 5F9Ch | ||
+ | CX = time to leave on screen in clock ticks | ||
+ | DH = 0-based screen line on which to place message | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (0Bh) | ||
+ | Notes: the original screen contents are restored when the message is removed | ||
+ | the message will not appear, and an error will be returned, if the | ||
+ | screen is in a graphics mode | ||
+ | SeeAlso: AX=5F9Ah | ||
+ | ----------215F9D----------------------------- | ||
+ | INT 21 - LANtastic v4.1+ - GET REDIRECTOR CONTROL BITS | ||
+ | AX = 5F9Dh | ||
+ | Return: DL = redirector control bits | ||
+ | bit 7: set to notify on print job completion | ||
+ | SeeAlso: AX=5F9Ah, | ||
+ | ----------215F9E----------------------------- | ||
+ | INT 21 - LANtastic v4.1+ - SET REDIRECTOR CONTROL BITS | ||
+ | AX = 5F9Eh | ||
+ | DL = redirector control bits (see AH = 5F9Dh) | ||
+ | Return: nothing | ||
+ | SeeAlso: AX=5F9Bh, | ||
+ | ----------215FA0----------------------------- | ||
+ | INT 21 - LANtastic - GET QUEUE ENTRY | ||
+ | AX = 5FA0h | ||
+ | BX = queue entry index (0000h is first entry) | ||
+ | DS:SI -> buffer for queue entry (see below) | ||
+ | ES:DI -> ASCIZ server name in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | BX = entry index for next queue entry (BX-1 is current index) | ||
+ | SeeAlso: AX=5FA1h, | ||
+ | |||
+ | Format of queue entry: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 00h empty | ||
+ | 01h being updated | ||
+ | 02h being held | ||
+ | 03h waiting for despool | ||
+ | 04h being despooled | ||
+ | 05h canceled | ||
+ | 06h spooled file could not be accessed | ||
+ | 07h destination could not be accessed | ||
+ | 08h rush job | ||
+ | | ||
+ | | ||
+ | 00h printer queue file | ||
+ | 01h message | ||
+ | 02h local file | ||
+ | 03h remote file | ||
+ | 04h to remote modem | ||
+ | 05h batch processor file | ||
+ | | ||
+ | bit 6: don't delete (for mail) | ||
+ | bit 5: mail file contains voice mail (v3+) | ||
+ | bit 4: mail message has been read | ||
+ | bit 3: response has been requested for this mail | ||
+ | | ||
+ | | ||
+ | 0Dh 48 BYTEs pathname of spooled file | ||
+ | 3Dh 16 BYTEs user who spooled file | ||
+ | 4Dh 16 BYTEs name of machine from which file was spooled | ||
+ | | ||
+ | | ||
+ | 61h 17 BYTEs ASCIZ destination device or user name | ||
+ | 72h 48 BYTEs comment field | ||
+ | ----------215FA1----------------------------- | ||
+ | INT 21 - LANtastic - SET QUEUE ENTRY | ||
+ | AX = 5FA1h | ||
+ | BX = handle of opened queue entry | ||
+ | DS:SI -> queue entry (see AX=5FA0h) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Notes: the only queue entry fields which may be changed are output control, | ||
+ | number of copies, destination device, and comment | ||
+ | the handle in BX is that from a create or open (INT 21/ | ||
+ | call on the file " | ||
+ | printer queue entries) | ||
+ | SeeAlso: AX=5FA0h, | ||
+ | ----------215FA2----------------------------- | ||
+ | INT 21 - LANtastic - CONTROL QUEUE | ||
+ | AX = 5FA2h | ||
+ | BL = control command | ||
+ | 00h start despooling (privileged) | ||
+ | 01h halt despooling (privileged) | ||
+ | 02h halt despooling at end of job (privileged) | ||
+ | 03h pause despooler at end of job (privileged) | ||
+ | 04h print single job (privileged) | ||
+ | 05h restart current job (privileged) | ||
+ | 06h cancel the current job | ||
+ | 07h hold queue entry | ||
+ | 08h release a held queue entry | ||
+ | 09h make queue entry a rushed job (privileged) | ||
+ | CX:DX = sequence number to control (commands 06h-09h) | ||
+ | DX = physical printer number (commands 00h-05h) | ||
+ | 00h-02h LPT1-LPT3 | ||
+ | 03h,04h COM1,COM2 | ||
+ | other all printers | ||
+ | ES:DI -> ASCIZ server name in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | ----------215FA3----------------------------- | ||
+ | INT 21 - LANtastic v3+ - GET PRINTER STATUS | ||
+ | AX = 5FA3h | ||
+ | BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2) | ||
+ | DS:SI -> buffer for printer status (see below) | ||
+ | ES:DI -> ASCIZ server name in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | BX = next physical printer number | ||
+ | Note: you must be logged in to the specified server | ||
+ | |||
+ | Format of printer status: | ||
+ | Offset Size Description | ||
+ | | ||
+ | bit 7: printer paused | ||
+ | bits 0-6: 0 printer disabled | ||
+ | 1 will stop at end of job | ||
+ | 2 print multiple jobs | ||
+ | | ||
+ | FFFFh if not despooling--ignore all following fields | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------215FA4----------------------------- | ||
+ | INT 21 - LANtastic v3+ - GET STREAM INFO | ||
+ | AX = 5FA4h | ||
+ | BX = 0-based stream index number | ||
+ | DS:SI -> buffer for stream information (see below) | ||
+ | ES:DI -> ASCIZ machine name in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | BX = next stream number | ||
+ | SeeAlso: AX=5FA5h | ||
+ | |||
+ | Format of stream information: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 01h 11 BYTEs logical printer resource template (may contain ? wildcards) | ||
+ | ----------215FA5----------------------------- | ||
+ | INT 21 - LANtastic v3+ - SET STREAM INFO | ||
+ | AX = 5FA5h | ||
+ | BX = 0-based stream index number | ||
+ | DS:SI -> buffer containing stream information (see AX=5FA4h) | ||
+ | ES:DI -> ASCIZ machine name in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | SeeAlso: AX=5FA4h | ||
+ | ----------215FA7----------------------------- | ||
+ | INT 21 - LANtastic - CREATE USER AUDIT ENTRY | ||
+ | AX = 5FA7h | ||
+ | DS:DX -> ASCIZ reason code (max 8 bytes) | ||
+ | DS:SI -> ASCIZ variable reason string (max 128 bytes) | ||
+ | ES:DI -> ASCIZ machine name in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: you must be logged in to the specified server and have the " | ||
+ | privilege to execute this call | ||
+ | ----------215FA9----------------------------- | ||
+ | INT 21 - LANtastic v4.1+ - SET EXTENDED QUEUE ENTRY | ||
+ | AX = 5FA9h | ||
+ | BX = handle of opened queue entry | ||
+ | DS:SI -> queue entry (see AX=5FA0h) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: | ||
+ | also set. This call supports direct despooling. | ||
+ | SeeAlso: AX=5FA1h | ||
+ | ----------215FB0----------------------------- | ||
+ | INT 21 - LANtastic - GET ACTIVE USER INFORMATION | ||
+ | AX = 5FB0h | ||
+ | BX = server login entry index | ||
+ | DS:SI -> buffer for active user entry (see below) | ||
+ | ES:DI -> ASCIZ machine name in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | BX = next login index | ||
+ | |||
+ | Format of active user entry: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | bit 0: fully logged in | ||
+ | 1: remote program load login | ||
+ | 2: user has system manager privileges | ||
+ | 3: user can create audit entries | ||
+ | 4: bypass mail protection | ||
+ | 5: treat as local process | ||
+ | 6: bypass queue protection | ||
+ | 7: bypass access control lists | ||
+ | | ||
+ | | ||
+ | | ||
+ | 0Ch 16 BYTEs name of user who is logged in | ||
+ | 1Ch 16 BYTEs name of remote logged in machine | ||
+ | | ||
+ | bit 0: user cannot change his password | ||
+ | | ||
+ | |||
+ | Values for last command: | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ---v3+--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ---v4+--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | (same as get queue, but can return named fields blanked) | ||
+ | ----------215FB1----------------------------- | ||
+ | INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION | ||
+ | AX = 5FB1h | ||
+ | DS:SI -> 64-byte buffer for link description | ||
+ | ES:DI -> ASCIZ machine and shared directory name in form | ||
+ | " | ||
+ | Return: CF clear if successful | ||
+ | CX = access control list privilege bits for requesting user | ||
+ | bit 4: (I) allow expansion of indirect files | ||
+ | 5: (A) allow attribute changing | ||
+ | 6: (P) allow physical access to device | ||
+ | 7: (E) allow program execution | ||
+ | 8: (N) allow file renaming | ||
+ | 9: (K) allow directory deletion | ||
+ | 10: (D) allow file deletion | ||
+ | 11: (L) allow file/ | ||
+ | 12: (M) allow directory creation | ||
+ | 13: (C) allow file creation | ||
+ | 14: (W) allow open for write and writing | ||
+ | 15: (R) allow open for read and reading | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | ----------215FB2----------------------------- | ||
+ | INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE | ||
+ | AX = 5FB2h | ||
+ | BX = username entry index (0 for first) | ||
+ | DS:SI -> 16-byte buffer for username | ||
+ | ES:DI -> ASCIZ server name in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | BX = next queue entry index | ||
+ | ----------215FB3----------------------------- | ||
+ | INT 21 - LANtastic v3+ - TRANSLATE PATH | ||
+ | AX = 5FB3h | ||
+ | DS:SI -> 128-byte buffer for ASCIZ result | ||
+ | ES:DI -> full ASCIZ path, including server name | ||
+ | DX = types of translation to be performed | ||
+ | bit 0: expand last component as indirect file | ||
+ | 1: return actual path relative to server' | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: | ||
+ | SeeALso: AX=5FB4h | ||
+ | ----------215FB4----------------------------- | ||
+ | INT 21 - LANtastic v3+ - CREATE INDIRECT FILE | ||
+ | AX = 5FB4h | ||
+ | DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file | ||
+ | ES:DI -> full ASCIZ path of indirect file to create, incl machine name | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: the contents of the indirect file may be any valid server-relative path | ||
+ | ----------215FB5----------------------------- | ||
+ | INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS | ||
+ | AX = 5FB5h | ||
+ | DS:SI -> 128-byte buffer for ASCIZ indirect file contents | ||
+ | ES:DI -> full ASCIZ path of indirect file | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | ----------215FB6----------------------------- | ||
+ | INT 21 - LANtastic v4.1+ - SET AUTO-LOGIN DEFAULTS | ||
+ | AX = 5FB6h | ||
+ | ES:DI -> pointer to ASCIZ default user name, immediately followed by | ||
+ | ASCIZ password | ||
+ | BL = adapter number to use for default login attempt | ||
+ | FFh try all valid adapters | ||
+ | 00h-05h try adapter 0-5 explicitly | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Notes: call with ES:DI -> two nulls to disable auto-login | ||
+ | SeeAlso: AX=5FB7h | ||
+ | ----------215FB7----------------------------- | ||
+ | INT 21 - LANtastic v4.1+ - GET AUTO-LOGIN DEFAULTS | ||
+ | AX = 5FB7h | ||
+ | ES:DI -> pointer to 16-byte buffer to store ASCIZ auto-login user name | ||
+ | Return: CF clear if successful | ||
+ | DL = adapter number used for default login attempt | ||
+ | FFh all valid adapters will be tried | ||
+ | 00h-05h specified adapter will be tried explicitly | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | SeeAlso: AX=5F81h, | ||
+ | ----------215FC0----------------------------- | ||
+ | INT 21 - LANtastic - GET TIME FROM SERVER | ||
+ | AX = 5FC0h | ||
+ | DS:SI -> time block (see below) | ||
+ | ES:DI -> ASCIZ server name to get time from | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | |||
+ | Format of time block: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------215FC8----------------------------- | ||
+ | INT 21 - LANtastic v4.0+ - SCHEDULE SERVER SHUTDOWN | ||
+ | AX = 5FC8h | ||
+ | ES:DI -> ASCIZ server name in form " | ||
+ | DS:SI -> ASCIZ reason string (80 characters) | ||
+ | CX = number of minutes until shutdown (0 = immediate) | ||
+ | DX = option flags (see below) | ||
+ | bit 0: auto reboot | ||
+ | 1: do not notify users | ||
+ | 2: halt after shutdown | ||
+ | 3: shutdown due to power fail (used by UPS) | ||
+ | bits 4-7: reserved | ||
+ | bits 8-14: user definable | ||
+ | bit 15: reserved | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | SeeAlso: AH=5FC9h | ||
+ | ----------215FC9----------------------------- | ||
+ | INT 21 - LANtastic v4.0+ - CANCEL SERVER SHUTDOWN | ||
+ | AX = 5FC9h | ||
+ | ES:DI -> ASCIZ server name in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: you must have the " | ||
+ | SeeAlso: AH=5FC8h | ||
+ | ----------215FCA----------------------------- | ||
+ | INT 21 - LANtastic v4.0+ - STUFF SERVER KEYBOARD BUFFER | ||
+ | AX = 5FCAh | ||
+ | ES:DI -> ASCIZ server name in form " | ||
+ | DS:SI -> ASCIZ string to stuff (128 bytes) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: you must have the " | ||
+ | maximum number of characters that can be stuffed is determined by the | ||
+ | server' | ||
+ | ----------215FCB----------------------------- | ||
+ | INT 21 - LANtastic v4.1+ - TERMINATE USER | ||
+ | AX = 5FCBh | ||
+ | ES:DI -> ASCIZ server name in form " | ||
+ | DS:SI -> blank-padded username. A null char = wildcard. | ||
+ | DS:DX -> blank-padded machine name. A null char = wildcard. | ||
+ | CX = minutes until termination (0 = immediate) | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: you must have the " | ||
+ | you cannot log yourself out using this call | ||
+ | SeeAlso: AX=5F82h | ||
+ | ----------215FCC----------------------------- | ||
+ | INT 21 - LANtastic v4.1+ - GET/SET SERVER CONTROL BITS | ||
+ | AX = 5FCCh | ||
+ | ES:DI -> ASCIZ server name in form " | ||
+ | CX = bit values (value of bits you want to set) See below. | ||
+ | DX = bit mask (bits you are interested in, 0 = get only) See | ||
+ | below. | ||
+ | Return: CF clear if successful | ||
+ | CX = control bits after call | ||
+ | bit 0: disable logins | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: you must have the " | ||
+ | ----------215FCD----------------------------- | ||
+ | INT 21 - LANtastic v4.1+ - FLUSH SERVER CACHES | ||
+ | AX = 5FCDh | ||
+ | ES:DI -> ASCIZ server name in form " | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: you must have the " | ||
+ | ----------215FD0----------------------------- | ||
+ | INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT | ||
+ | AX = 5FD0h | ||
+ | Return: CF clear if successful | ||
+ | CX = redirected printer timeout in clock ticks of 55ms | ||
+ | 0000h if timeout disabled | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | SeeAlso: AX=5FD1h | ||
+ | ----------215FD1----------------------------- | ||
+ | INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT | ||
+ | AX = 5FD1h | ||
+ | CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | SeeAlso: AX=5FD0h | ||
+ | ----------215FE0----------------------------- | ||
+ | INT 21 - LANtastic - GET DOS SERVICE VECTOR | ||
+ | AX = 5FE0h | ||
+ | Return: CF clear if successful | ||
+ | ES:BX -> current FAR service routine | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: the service routine is called by the LANtastic redirector whenever DOS | ||
+ | may safely be called, permitting external TSRs and drivers to hook | ||
+ | into LANtastic' | ||
+ | SeeAlso: AX=5FE1h, | ||
+ | ----------215FE1----------------------------- | ||
+ | INT 21 - LANtastic - SET DOS SERVICE VECTOR | ||
+ | AX = 5FE1h | ||
+ | ES:BX -> FAR routine to call when DOS services are available | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Note: new handler must chain to previous handler as its first action | ||
+ | SeeAlso: AX=5FE0h | ||
+ | ----------215FE2----------------------------- | ||
+ | INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR | ||
+ | AX = 5FE2h | ||
+ | Return: CF clear if successful | ||
+ | ES:BX -> current FAR message service routine | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | SeeAlso: AX=5FE3h | ||
+ | ----------215FE3----------------------------- | ||
+ | INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR | ||
+ | AX = 5FE3h | ||
+ | ES:BX -> FAR routine for processing network messages | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code | ||
+ | Notes: | ||
+ | on invocation, ES:BX -> just-received message | ||
+ | SeeAlso: AX=5FE2h | ||
+ | ----------2160------------------------------- | ||
+ | INT 21 - DOS 3.0+ - CANONICALIZE FILENAME OR PATH | ||
+ | AH = 60h | ||
+ | DS:SI -> ASCIZ filename or path | ||
+ | ES:DI -> 128-byte buffer for canonicalized name | ||
+ | Return: CF set on error | ||
+ | AX = error code | ||
+ | 02h invalid component in directory path or drive letter only | ||
+ | 03h malformed path or invalid drive letter | ||
+ | ES:DI buffer unchanged | ||
+ | CF clear if successful | ||
+ | AH = 00h | ||
+ | AL = destroyed (00h or 5Ch or last char of current dir on drive) | ||
+ | buffer filled with qualified name of form D: | ||
+ | \\MACHINE\PATH\FILE.EXT | ||
+ | Notes: the input path need not actually exist | ||
+ | letters are uppercased, forward slashes converted to backslashes, | ||
+ | asterisks converted to appropriate number of question marks, and | ||
+ | file and directory names are truncated to 8.3 if necessary. | ||
+ | ' | ||
+ | filespecs on local drives always start with " | ||
+ | drives always start with " | ||
+ | if path string is on a JOINed drive, the returned name is the one that | ||
+ | would be needed if the drive were not JOINed; similarly for a | ||
+ | SUBSTed, ASSIGNed, or network drive letter. Because of this, it is | ||
+ | possible to get a qualified name that is not legal under the current | ||
+ | combination of SUBSTs, ASSIGNs, JOINs, and network redirections | ||
+ | under DOS 3.3 through 5.00, a device name is translated differently if | ||
+ | the device name does not have an explicit directory or the directory | ||
+ | is \DEV (relative directory DEV from the root directory works | ||
+ | correctly). | ||
+ | unchanged device name and extension appended to the string X:/ | ||
+ | (forward slash instead of backward slash as in all other cases) where | ||
+ | X is the default or explicit drive letter. | ||
+ | functions which take pathnames require canonical paths if invoked via | ||
+ | INT 21/AX=5D00h | ||
+ | supported by OS/2 v1.1 compatibility box | ||
+ | NetWare 2.1x does not support characters with the high bit set; early | ||
+ | versions of NetWare 386 support such characters except in this call. | ||
+ | In addition, NetWare returns error code 3 for the path " | ||
+ | should use " | ||
+ | for DOS 3.3-5.0, the input and output buffers may be the same, as the | ||
+ | canonicalized name is built in an internal buffer and copied to the | ||
+ | specified output buffer as the very last step | ||
+ | SeeAlso: INT 2F/ | ||
+ | ----------2161------------------------------- | ||
+ | INT 21 - DOS 3+ - UNUSED | ||
+ | AH = 61h | ||
+ | Return: AL = 00h | ||
+ | Note: this function does nothing and returns immediately | ||
+ | ----------2162------------------------------- | ||
+ | INT 21 - DOS 3+ - GET CURRENT PSP ADDRESS | ||
+ | AH = 62h | ||
+ | Return: BX = segment of PSP for current process | ||
+ | Notes: | ||
+ | and may thus be called at any time, even during another INT 21h call | ||
+ | the current PSP is not necessarily the caller' | ||
+ | identical to the undocumented AH=51h | ||
+ | SeeAlso: AH=50h, | ||
+ | ----------216300----------------------------- | ||
+ | INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS | ||
+ | AX = 6300h | ||
+ | Return: CF clear if successful | ||
+ | DS:SI -> lead byte table (see below for format) | ||
+ | CF set on error | ||
+ | AX = error code (01h) (see AH=59h) | ||
+ | Notes: does not preserve any registers other than SS:SP | ||
+ | the US version of MSDOS 3.30 treats this as an unused function, | ||
+ | setting AL=00h and returning immediately | ||
+ | SeeAlso: AX=6301h, | ||
+ | |||
+ | Format of lead byte table entry: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | ... | ||
+ | N 2 BYTEs 00h, | ||
+ | ----------216300----------------------------- | ||
+ | INT 21 - Asian DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD TABLE | ||
+ | AX = 6300h | ||
+ | Return: AL = error code | ||
+ | 00h successful | ||
+ | DS:SI -> DBCS table (see below) | ||
+ | all other registers except CS:IP and SS:SP destroyed | ||
+ | FFh not supported | ||
+ | Notes: | ||
+ | the US version of MSDOS 3.30 treats this as an unused function, | ||
+ | setting AL=00h and returning immediately | ||
+ | the US version of DOS 4.0+ accepts this function, but returns an empty | ||
+ | list | ||
+ | SeeAlso: AX=6300h" | ||
+ | |||
+ | Format of DBCS table: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | ... | ||
+ | N 2 BYTEs 00h, | ||
+ | ----------216301----------------------------- | ||
+ | INT 21 - DOS 2.25, Asian DOS 3.2+ - SET KOREAN (HONGEUL) INPUT MODE | ||
+ | AX = 6301h | ||
+ | DL = new mode | ||
+ | 00h return only full characters on DOS keyboard input functions | ||
+ | 01h return partially-formed characters also | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | FFh invalid mode | ||
+ | SeeAlso: AH=07h, | ||
+ | ----------216302----------------------------- | ||
+ | INT 21 - DOS 2.25, Asian DOS 3.2+ - GET KOREAN (HONGEUL) INPUT MODE | ||
+ | AX = 6302h | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | DL = current input mode | ||
+ | 00h return only full characters | ||
+ | 01h return partial characters | ||
+ | FFh not supported | ||
+ | SeeAlso: AH=07h, | ||
+ | ----------2164------------------------------- | ||
+ | INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG | ||
+ | AH = 64h | ||
+ | AL = flag | ||
+ | 00h (default) call device driver function 5 (non-dest read) | ||
+ | before INT 21/ | ||
+ | nonzero don't call driver function 5 | ||
+ | Return: nothing | ||
+ | Notes: | ||
+ | does not use any of the DOS-internal stacks and is thus fully | ||
+ | reentrant | ||
+ | SeeAlso: AH=01h, | ||
+ | ----------2164--BX0000----------------------- | ||
+ | INT 21 - OS/2 v2.0 Virtual DOS Machine - GET/SET TASK TITLE | ||
+ | AH = 64h | ||
+ | BX = 0000h | ||
+ | CX = 636Ch | ||
+ | DX = function | ||
+ | 0000h enable automatic title switch on INT 21/AH=4Bh | ||
+ | 0001h set session title | ||
+ | ES:DI -> new ASCIZ title or "" | ||
+ | 0002h get session title | ||
+ | ES:DI -> buffer for current title | ||
+ | Return: buffer filled (single 00h if title never changed) | ||
+ | SeeAlso: INT 15/ | ||
+ | ----------2165------------------------------- | ||
+ | INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION | ||
+ | AH = 65h | ||
+ | AL = info ID | ||
+ | 01h get general internationalization info | ||
+ | 02h get pointer to uppercase table | ||
+ | 04h get pointer to filename uppercase table | ||
+ | 05h get pointer to filename terminator table | ||
+ | 06h get pointer to collating sequence table | ||
+ | 07h (DOS 4+) get pointer to Double-Byte Character Set table | ||
+ | BX = code page (-1=global code page) | ||
+ | DX = country ID (-1=current country) | ||
+ | ES:DI -> country information buffer (see below) | ||
+ | CX = size of buffer (>= 5) | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if succesful | ||
+ | CX = size of country information returned | ||
+ | ES:DI -> country information | ||
+ | Notes: | ||
+ | has been documented for DOS 5.0, but was undocumented in ealier | ||
+ | versions | ||
+ | NLSFUNC must be installed to get info for countries other than the | ||
+ | default | ||
+ | subfunctions 02h and 04h are identical under OS/2 | ||
+ | SeeAlso: AH=38h,INT 2F/ | ||
+ | |||
+ | Format of country information: | ||
+ | Offset Size Description | ||
+ | | ||
+ | ---if info ID = 01h--- | ||
+ | | ||
+ | | ||
+ | | ||
+ | 07h 34 BYTEs country-dependent info (see AH=38h) | ||
+ | ---if info ID = 02h--- | ||
+ | | ||
+ | ---if info ID = 04h--- | ||
+ | | ||
+ | ---if info ID = 05h--- | ||
+ | | ||
+ | ---if info ID = 06h--- | ||
+ | | ||
+ | ---if info ID = 07h (DOS 4+)--- | ||
+ | | ||
+ | |||
+ | Format of uppercase table: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh | ||
+ | |||
+ | Format of collating table: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 02h 256 BYTEs values used to sort characters 00h to FFh | ||
+ | |||
+ | Format of filename terminator table: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Note: | ||
+ | |||
+ | Format of filename uppercase table: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh | ||
+ | |||
+ | Format of DBCS lead byte table: | ||
+ | Offset Size Description | ||
+ | | ||
+ | 02h 2N BYTEs start/ | ||
+ | WORD 0000h (end of table) | ||
+ | ----------2165------------------------------- | ||
+ | INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION | ||
+ | AH = 65h | ||
+ | AL = function | ||
+ | 20h capitalize character | ||
+ | DL = character to capitalize | ||
+ | Return: DL = capitalized character | ||
+ | 21h capitalize string | ||
+ | DS:DX -> string to capitalize | ||
+ | CX = length of string | ||
+ | 22h capitalize ASCIZ string | ||
+ | DS:DX -> ASCIZ string to capitalize | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | Note: these calls have been documented for DOS 5+, but were undocumented in | ||
+ | DOS 4.x. | ||
+ | ----------216523----------------------------- | ||
+ | INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE | ||
+ | AX = 6523h | ||
+ | DL = character | ||
+ | DH = second character of double-byte character (if applicable) | ||
+ | Return: CF set on error | ||
+ | CF clear if successful | ||
+ | AX = type | ||
+ | 00h no | ||
+ | 01h yes | ||
+ | 02h neither yes nor no | ||
+ | ----------2165------------------------------- | ||
+ | INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION | ||
+ | AH = 65h | ||
+ | AL = function | ||
+ | A0h capitalize filename character | ||
+ | DL = character to capitalize | ||
+ | Return: DL = capitalized character | ||
+ | A1h capitalize counted filename string | ||
+ | DS:DX -> filename string to capitalize | ||
+ | CX = length of string | ||
+ | A2h capitalize ASCIZ filename | ||
+ | DS:DX -> ASCIZ filename to capitalize | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | Note: | ||
+ | pointer depending on the high bit of AL, but doesn' | ||
+ | bit before branching by function number). | ||
+ | ----------216601----------------------------- | ||
+ | INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE | ||
+ | AX = 6601h | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | BX = active code page (see AX=6602h) | ||
+ | DX = system code page | ||
+ | SeeAlso: AX=6602h | ||
+ | ----------216602----------------------------- | ||
+ | INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE | ||
+ | AX = 6602h | ||
+ | BX = active code page | ||
+ | 437 US | ||
+ | 850 Multilingual | ||
+ | 852 Slavic/ | ||
+ | 857 Turkish | ||
+ | 860 Portugal | ||
+ | 861 Iceland | ||
+ | 863 Canada (French) | ||
+ | 865 Norway/ | ||
+ | DX = system code page (active page at boot time) | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | SeeAlso: AX=6601h | ||
+ | ----------2167------------------------------- | ||
+ | INT 21 - DOS 3.3+ - SET HANDLE COUNT | ||
+ | AH = 67h | ||
+ | BX = size of new file handle table for process | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | Notes: if BX <= 20, no action is taken if the handle limit has not yet been | ||
+ | increased, and the table is copied back into the PSP if the limit | ||
+ | is currently > 20 handles | ||
+ | for file handle tables of > 20 handles, DOS 3.30 never reuses the | ||
+ | same memory block, even if the limit is being reduced; this can lead | ||
+ | to memory fragmentation as a new block is allocated and the existing | ||
+ | one freed | ||
+ | only the first 20 handles are copied to child processes in DOS 3.3 | ||
+ | BUG: the original release of DOS 3.30 allocates a full 64K for the handle | ||
+ | table on requests for an even number of handles | ||
+ | SeeAlso: AH=26h | ||
+ | ----------2168------------------------------- | ||
+ | INT 21 - DOS 3.3+ - " | ||
+ | AH = 68h | ||
+ | BX = file handle | ||
+ | Return: CF clear if successful | ||
+ | all data still in DOS disk buffers is written to disk immediately, | ||
+ | and the file's directory entry is updated | ||
+ | CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | SeeAlso: AX=5D01h, | ||
+ | ----------2169------------------------------- | ||
+ | INT 21 U - DOS 4.0 internal - GET/SET DISK SERIAL NUMBER | ||
+ | AH = 69h | ||
+ | AL = subfunction | ||
+ | 00h get serial number | ||
+ | 01h set serial number | ||
+ | BL = drive (0=default, 1=A, 2=B, etc) | ||
+ | DS:DX -> disk info (see below) | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | AX destroyed | ||
+ | (AL = 00h) buffer filled with appropriate values from extended BPB | ||
+ | (AL = 01h) extended BPB on disk set to values from buffer | ||
+ | Notes: does not generate a critical error; all errors are returned in AX | ||
+ | error 0005h given if no extended BPB on disk | ||
+ | does not work on network drives (error 0001h) | ||
+ | buffer after first two bytes is exact copy of bytes 27h thru 3Dh of | ||
+ | | ||
+ | SeeAlso: AX=440Dh | ||
+ | |||
+ | Format of disk info: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | 06h 11 BYTEs volume label or "NO NAME " if none present | ||
+ | | ||
+ | ----------2169------------------------------- | ||
+ | INT 21 - DR-DOS 5.0 - NULL FUNCTION | ||
+ | AH = 69h | ||
+ | Return: AL = 00h | ||
+ | SeeAlso: AH=18h | ||
+ | ----------216969----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = 6969h | ||
+ | Return: AX = 0666h if resident | ||
+ | SeeAlso: AX=58CCh, | ||
+ | ----------216A------------------------------- | ||
+ | INT 21 U - DOS 4+ - COMMIT FILE | ||
+ | AH = 6Ah | ||
+ | BX = file handle | ||
+ | Return: CF clear if successful | ||
+ | AH = 68h | ||
+ | CF set on error | ||
+ | AX = error code (06h) (see AH=59h) | ||
+ | Note: | ||
+ | DOS 4.x | ||
+ | SeeAlso: AH=68h | ||
+ | ----------216B------------------------------- | ||
+ | INT 21 U - DOS 4.0 internal - ??? | ||
+ | AH = 6Bh | ||
+ | AL = subfunction | ||
+ | 00h ??? | ||
+ | DS:SI -> Current Directory Structure??? | ||
+ | CL = drive (1=A:) | ||
+ | 01h ??? | ||
+ | DS:SI -> ??? | ||
+ | CL = file handle??? | ||
+ | 02h ??? | ||
+ | DS:SI -> Current Directory Structure??? | ||
+ | DI = ??? | ||
+ | CX = drive (1=A:) | ||
+ | Return: CF set on error | ||
+ | AX = error code (see INT 21/AH=59h) | ||
+ | CF clear if successful | ||
+ | Note: | ||
+ | SeeAlso: AH=6Bh" | ||
+ | ----------216B------------------------------- | ||
+ | INT 21 U - DOS 5.0 - NULL FUNCTION | ||
+ | AH = 6Bh | ||
+ | Return: AL = 00h | ||
+ | Note: this function does nothing and returns immediately | ||
+ | SeeAlso: AH=6Bh" | ||
+ | ----------216C00----------------------------- | ||
+ | INT 21 - DOS 4+ - EXTENDED OPEN/CREATE | ||
+ | AX = 6C00h | ||
+ | BL = open mode as in AL for normal open (INT 21/AH=3Dh) | ||
+ | bit 7: inheritance | ||
+ | bits 4-6: sharing mode | ||
+ | bit 3 reserved | ||
+ | bits 0-2: access mode | ||
+ | BH = flags | ||
+ | bit 6 = auto commit on every write | ||
+ | bit 5 = return error rather than doing INT 24h | ||
+ | CX = create attribute | ||
+ | bits 6-15 reserved | ||
+ | bit 5: archive | ||
+ | bit 4: reserved | ||
+ | bit 3: volume label | ||
+ | bit 2: system | ||
+ | bit 1: hidden | ||
+ | bit 0: readonly | ||
+ | DL = action if file exists/does not exists | ||
+ | bits 7-4 action if file does not exist | ||
+ | 0000 fail | ||
+ | 0001 create | ||
+ | bits 3-0 action if file exists | ||
+ | 0000 fail | ||
+ | 0001 open | ||
+ | 0010 replace/ | ||
+ | DH = 00h (reserved) | ||
+ | DS:SI -> ASCIZ file name | ||
+ | Return: CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | CF clear if successful | ||
+ | AX = file handle | ||
+ | CX = 1 file opened | ||
+ | 2 file created | ||
+ | 3 file replaced | ||
+ | Note: the PC LAN Program only supports DL=01h, DL=10h/ | ||
+ | and DL=12h | ||
+ | SeeAlso: AH=3Ch, | ||
+ | ----------217070BX6060----------------------- | ||
+ | INT 21 - PCW Weather Card interface - GET DATA SEGMENT | ||
+ | AX = 7070h | ||
+ | BX = 6060h | ||
+ | CX = 7070h | ||
+ | DX = 7070h | ||
+ | SX = 7070h | ||
+ | DX = 7070h | ||
+ | Return: AX = segment of data structure | ||
+ | Notes: the data structure is at offset 516 from this segment. | ||
+ | the update byte is at offset 514 from this segment. | ||
+ | once per second while this byte is nonzero and it is decremented | ||
+ | once per second. | ||
+ | SeeAlso: AX=7070h/ | ||
+ | |||
+ | Format of data structure: | ||
+ | Offset Type Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------217070BX7070----------------------- | ||
+ | INT 21 - PCW Weather Card interface - INSTALLATION CHECK | ||
+ | AX = 7070h | ||
+ | BX = 7070h | ||
+ | CX = 7070h | ||
+ | DX = 7070h | ||
+ | SX = 7070h | ||
+ | DX = 7070h | ||
+ | Return: AX = 0070h | ||
+ | BX = 0070h | ||
+ | CX = 0070h | ||
+ | DX = 0070h | ||
+ | SX = 0070h | ||
+ | DX = 0070h | ||
+ | SeeAlso: AX=7070h/ | ||
+ | ----------2176------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = 76h | ||
+ | Return: AL = 48h if resident | ||
+ | SeeAlso: AX=6969h, | ||
+ | ----------217761----------------------------- | ||
+ | INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK | ||
+ | AX = 7761h (' | ||
+ | Return: AX = 6177h | ||
+ | Note: | ||
+ | SeeAlso: INT 16/AX=7761h | ||
+ | ----------217700----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = 7700h | ||
+ | Return: AX = 0920h if resident | ||
+ | SeeAlso: AH=76h, | ||
+ | ----------217F------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = 7Fh | ||
+ | Return: AH = 80h if resident | ||
+ | SeeAlso: AX=7700h, | ||
+ | --------------------------------------------- | ||
+ | Interrupt List, part 4 of 7 | ||
+ | This compilation is Copyright (c) 1989, | ||
+ | ----------2180------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - EXECUTE PROGRAM IN BACKGROUND | ||
+ | AH = 80h | ||
+ | DS:DX -> ASCIZ full program name | ||
+ | ES:BX -> parameter block (as for AX=4B00h) | ||
+ | Return: CF clear if successful | ||
+ | AX = CSID | ||
+ | CF set on error | ||
+ | AX = error code (see AH=59h) | ||
+ | Note: this function is called by the DETACH command | ||
+ | SeeAlso: AX=8700h | ||
+ | ----------218080----------------------------- | ||
+ | INT 21 - PCW Weather Card interface - UNINSTALL PCW.COM AND FREE MEMORY | ||
+ | AX = 8080h | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=7070h/ | ||
+ | ----------2181------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 81h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2182------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 82h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2183------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 83h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2183------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = 83h | ||
+ | Return: DX = 1990h if resident | ||
+ | SeeAlso: AH=76h, | ||
+ | ----------2184------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 84h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2184------------------------------- | ||
+ | INT 21 - VIRUS - "SVC 5.0" or "SVC 6.0" - INSTALLATION CHECK | ||
+ | AH = 84h | ||
+ | Return: DX = 1990h if resident | ||
+ | BH = version number (major in high nybble, minor in low) | ||
+ | SeeAlso: AH=83h" | ||
+ | ----------2185------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 85h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2186------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 86h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------218700----------------------------- | ||
+ | INT 21 U - European DOS 4.0 - GET PID??? | ||
+ | AX = 8700h | ||
+ | Return: AX = PID if AL nonzero | ||
+ | BX = ??? | ||
+ | CX = ??? | ||
+ | Notes: | ||
+ | this function apparently must return AX=0001h for INT 21/AH=80h to | ||
+ | succeed | ||
+ | SeeAlso: AH=62h, | ||
+ | ----------2188------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 88h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2189------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 89h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | ----------2189------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = 89h | ||
+ | Return: AX = 0123h if resident | ||
+ | SeeAlso: AH=84h" | ||
+ | ----------218A------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 8Ah | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------218B------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 8Bh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------218C------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 8Ch | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------218D------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 8Dh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------218E------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 8Eh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------218F------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 8Fh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2190------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 90h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2190------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = 90h | ||
+ | Return: AH = 01h if resident | ||
+ | SeeAlso: AH=89h" | ||
+ | ----------2191------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 91h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2192------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 92h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2193------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 93h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2194------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 94h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2195------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 95h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2196------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 96h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2197------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 97h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------219753----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = 9753h | ||
+ | Return: never (executes original program) if virus resident | ||
+ | SeeAlso: AH=90h" | ||
+ | ----------2198------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 98h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------2199------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 99h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------219A------------------------------- | ||
+ | INT 21 U - European MSDOS 4.0 - ??? | ||
+ | AH = 9Ah | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------21A0------------------------------- | ||
+ | INT 21 - Attachmate Extra - GET 3270 DISPLAY STATE | ||
+ | AH = A0h | ||
+ | Return: AL = display status | ||
+ | bit 7 : 0=windowed, 1=enlarged | ||
+ | bits 6-3: current screen profile number 0-9 | ||
+ | bits 2-0: active window number | ||
+ | 0=PC, 1-4=host B-E, 5-6=notepad F-G | ||
+ | BX = host window status | ||
+ | bit 15: reserved | ||
+ | bit 14: 0=host E window installed, 1=not | ||
+ | bit 13: 0=host E terminal on, 1=off | ||
+ | bit 12: 0=host E window displayed, 1=not | ||
+ | bit 11: reserved | ||
+ | bit 10: 0=host D window installed, 1=not | ||
+ | bit 9: 0=host D terminal on, 1=off | ||
+ | bit 8: 0=host D window displayed, 1=not | ||
+ | bit 7: reserved | ||
+ | bit 6: 0=host C window installed, 1=not | ||
+ | bit 5: 0=host C terminal on, 1=off | ||
+ | bit 4: 0=host C window displayed, 1=not | ||
+ | bit 3: reserved | ||
+ | bit 2: 0=host B window installed, 1=not | ||
+ | bit 1: 0=host B terminal on, 1=off | ||
+ | bit 0: 0=host B window displayed, 1=not | ||
+ | Note: | ||
+ | SeeAlso: AH=A1h | ||
+ | ----------21A1------------------------------- | ||
+ | INT 21 - Attachmate Extra - SET 3270 DISPLAY STATE | ||
+ | AH = A1h | ||
+ | AL = set status byte | ||
+ | bit 7 : 0=windowed, 1=enlarged | ||
+ | bits 6-3: current screen profile number 0-9 | ||
+ | bits 2-0: active window number | ||
+ | 0=PC, 1-4=host B-E, 5-6=notepad F-G | ||
+ | SeeAlso: AH=A0h, | ||
+ | ----------21A1D5----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = A1D5h | ||
+ | Return: AX = 900Dh if resident | ||
+ | SeeAlso: AX=9753h, | ||
+ | ----------21A2------------------------------- | ||
+ | INT 21 - Attachmate Extra - SET HOST WINDOW STATE | ||
+ | AH = A2h | ||
+ | AL = set status byte | ||
+ | bit 7 : 0=power off, 1=power on | ||
+ | bit 6 : 0=not installed, 1=installed | ||
+ | bits 5-3: reserved | ||
+ | bits 2-0: window number 1-4=host B-E | ||
+ | SeeAlso: AH=A1h | ||
+ | ----------21A3------------------------------- | ||
+ | INT 21 - Attachmate Extra - SEND KEYSTROKES TO HOST WINDOW | ||
+ | AH = A3h | ||
+ | AL = window number (1-4=host B-E) | ||
+ | CX = 0001h | ||
+ | DS:BX -> keystroke buffer | ||
+ | DL = zero if keystroke buffer contains host function code, | ||
+ | | ||
+ | Return: CX = zero if character sent, non-zero if not | ||
+ | BX incremented if CX=0 | ||
+ | |||
+ | Values for host function code: | ||
+ | 00h=reserved 10h=PF16 20h=Clear 30h=SysRq | ||
+ | 01h=PF1 11h=PF17 21h=Print 31h=ErInp | ||
+ | 02h=PF2 12h=PF18 22h=Left 32h=ErEof | ||
+ | 03h=PF3 13h=PF19 23h=Right 33h=Ident | ||
+ | 04h=PF4 14h=PF20 24h=Up 34h=Test | ||
+ | 05h=PF5 15h=PF21 25h=Down 35h=Reset | ||
+ | 06h=PF6 16h=PF22 26h=Home 36h=DevCncl | ||
+ | 07h=PF7 17h=PF23 27h=Fast Left 37h=Dup | ||
+ | 08h=PF8 18h=PF24 28h=Fast Right 38h=FldMark | ||
+ | 09h=PF9 19h=Alt on 29h=Bksp 39h=Enter | ||
+ | 0Ah=PF10 1Ah=Alt off 2Ah=Insert 3Ah=CrSel | ||
+ | 0Bh=PF11 1Bh=Shift on 2Bh=Delete | ||
+ | 0Ch=PF12 1Ch=Shift off 2Ch=Backtab | ||
+ | 0Dh=PF13 1Dh=PA1 2Dh=Tab | ||
+ | 0Eh=PF14 1Eh=PA2 2Eh=Newline | ||
+ | 0Fh=PF15 1Fh=PA3 2Fh=Attn | ||
+ | ----------21A4------------------------------- | ||
+ | INT 21 - Attachmate Extra - GET HOST WINDOW BUFFER ADDRESS | ||
+ | AH = A4h | ||
+ | AL = window number (1-4=host B-E) | ||
+ | Return: DS:BX -> 3270 display buffer | ||
+ | SeeAlso: AH=A5h, | ||
+ | ----------21A5------------------------------- | ||
+ | INT 21 - Attachmate Extra - GET HOST WINDOW CURSOR POSITION | ||
+ | AH = A5h | ||
+ | AL = window number (1-4=host B-E) | ||
+ | Return: BX = cursor position (80 * row + column, where 0:0 is upper left) | ||
+ | Note: if the host window is configured with the Extended Attribute (EAB) | ||
+ | feature, multiply the cursor position by 2 to obtain the byte offset | ||
+ | into the display buffer | ||
+ | SeeAlso: AH=A4h | ||
+ | ----------21A55A----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = A55Ah | ||
+ | Return: AX = 5AA5h if resident | ||
+ | SeeAlso: AX=A1D5h, | ||
+ | ----------21AA00----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = AA00h | ||
+ | Return: AX = 00AAh if resident | ||
+ | SeeAlso: AX=A55Ah, | ||
+ | ----------21AA03----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = AA03h | ||
+ | Return: AX = 03AAh if resident | ||
+ | SeeAlso: AX=AA00h, | ||
+ | ----------21AB------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = ABh | ||
+ | Return: AX = 5555h if resident | ||
+ | SeeAlso: AX=AA03h, | ||
+ | ----------21AF------------------------------- | ||
+ | INT 21 - Attachmate Extra - GET TRANSLATE TABLE ADDRESS | ||
+ | AH = AFh | ||
+ | Return: DS:BX -> translate tables (see below) | ||
+ | |||
+ | Format of translate tables: | ||
+ | Offset Size Description | ||
+ | 00h 256 BYTEs ASCII to 3270 buffer code translate table | ||
+ | 100h 256 BYTEs 3270 buffer code to ASCII translate table | ||
+ | 200h 256 BYTEs 3270 buffer code to EBCDIC translate table | ||
+ | 300h 256 BYTEs EBCDIC to 3270 buffer code translate table | ||
+ | ----------21B5------------------------------- | ||
+ | INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL | ||
+ | AH = B5h | ||
+ | AL = subfunction | ||
+ | 03h get task mode | ||
+ | Return: AH = 00h | ||
+ | AL = current task mode byte | ||
+ | 04h get task mode pointer | ||
+ | Return: ES:BX -> task mode byte | ||
+ | Notes: the task mode byte specifies how task cleanup should be performed, but | ||
+ | is declared to be version-dependent | ||
+ | allows a program to disable the automatic cleanup for programs managing | ||
+ | task swapping, etc. | ||
+ | |||
+ | Values for task mode byte in version 3.01: | ||
+ | | ||
+ | 04h no task cleanup | ||
+ | ----------21B6------------------------------- | ||
+ | INT 21 - Novell NetWare SFT Level II - EXTENDED FILE ATTRIBUTES | ||
+ | AH = B6h | ||
+ | AL = subfunction | ||
+ | 00h get extended file attributes | ||
+ | 01h set extended file attributes | ||
+ | CL = attributes | ||
+ | bits 2-0: search mode (executables only) | ||
+ | 000 none (use shell' | ||
+ | 001 search on all opens without path | ||
+ | 010 do not search | ||
+ | 011 search on read-only opens without path | ||
+ | 100 reserved | ||
+ | 101 search on all opens | ||
+ | 110 reserved | ||
+ | 111 search on all read-only opens | ||
+ | 3: reserved | ||
+ | 4: transaction tracking file | ||
+ | 5: indexing file | ||
+ | 6: read audit (to be implemented) | ||
+ | 7: write audit (to be implemented) | ||
+ | DS:DX -> ASCIZ pathname | ||
+ | Return: CF set on error | ||
+ | AL = error code | ||
+ | 8Ch caller lacks privileges | ||
+ | FFh file not found | ||
+ | CL = current extended file attributes | ||
+ | SeeAlso: AX=4300h | ||
+ | ----------21B8------------------------------- | ||
+ | INT 21 - Novell Advanced NetWare 2.0+ - PRINT JOBS | ||
+ | AH = B8h | ||
+ | AL = subfunction | ||
+ | 00h get default print job flags | ||
+ | 01h set default capture flags (see below) | ||
+ | 02h get specific capture flags | ||
+ | 03h set specific print job flags | ||
+ | 04h get default local printer | ||
+ | 05h set default local printer | ||
+ | 06h set capture print queue | ||
+ | 07h set capture print job | ||
+ | 08h get banner user name | ||
+ | 09h set banner user name | ||
+ | CX = buffer size | ||
+ | ES:BX -> buffer | ||
+ | Return: none | ||
+ | |||
+ | Format of capture flags table: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | bit 2: print capture file if interrupted by loss of connection | ||
+ | 3: no automatic form feed after print job | ||
+ | 6: printing control sequences interpreted by print service | ||
+ | 7: print banner page before capture file | ||
+ | | ||
+ | | ||
+ | | ||
+ | 05h 13 BYTEs text to be placed on banner page | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | (high byte first) | ||
+ | 0000h = never timeout | ||
+ | | ||
+ | | ||
+ | 1Bh 13 BYTEs name of form required in printer | ||
+ | | ||
+ | 00h inactive, FFh LPT device is being captured | ||
+ | | ||
+ | 00h if no file specified, FFh if capturing to file | ||
+ | | ||
+ | running) | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------21B8------------------------------- | ||
+ | INT 21 - Attachmate Extra - DISABLE HOST BUFFER UPDATES | ||
+ | AH = B8h | ||
+ | AL = window number (1-4=host B-E) | ||
+ | DL = 01h | ||
+ | Notes: only valid in CUT mode | ||
+ | next AID keystroke (eg Enter) enables host buffer updates | ||
+ | SeeAlso: AH=A4h | ||
+ | ----------21BB------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - SET END OF JOB STATUS | ||
+ | AH = BBh | ||
+ | AL = new EOJ flag | ||
+ | 00h disable EOJs | ||
+ | otherwise enable EOJs | ||
+ | Return: AL = old EOJ flag | ||
+ | SeeAlso: AH=D6h | ||
+ | ----------21BBBB----------------------------- | ||
+ | INT 21 - VIRUS - "Hey You" - INSTALLATION CHECK | ||
+ | AX = BBBBh | ||
+ | Return: AX = 6969h | ||
+ | SeeAlso: AH=ABh" | ||
+ | ----------21BC------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK PHYSICAL RECORD | ||
+ | AH = BCh | ||
+ | AL = flags | ||
+ | bit 0: lock as well as log record | ||
+ | 1: non-exclusive lock | ||
+ | BX = file handle | ||
+ | CX:DX = offset | ||
+ | BP = timeout in timer ticks (1/18 sec) | ||
+ | SI:DI = length of region to lock | ||
+ | Return: AL = error code | ||
+ | 00h successful | ||
+ | 96h no dynamic memory for file | ||
+ | FEh timed out | ||
+ | FFh failed | ||
+ | SeeAlso: AH=BDh, | ||
+ | ----------21BD------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE PHYSICAL RECORD | ||
+ | AH = BDh | ||
+ | BX = file handle | ||
+ | CX:DX = offset | ||
+ | Return: AL = error code (see AH=BCh) | ||
+ | Note: | ||
+ | SeeAlso: AH=BCh, | ||
+ | ----------21BE------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR PHYSICAL RECORD | ||
+ | AH = BEh | ||
+ | BX = file handle | ||
+ | CX:DX = offset | ||
+ | Return: AL = error code (see AH=BCh) | ||
+ | Note: | ||
+ | SeeAlso: AH=BCh, | ||
+ | ----------21BE------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = BEh | ||
+ | Return: AX = 1234h if resident | ||
+ | SeeAlso: AX=BBBBh, | ||
+ | ----------21BE00----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = BE00h | ||
+ | CF set | ||
+ | Return: CF clear if resident | ||
+ | SeeAlso: AH=BEh" | ||
+ | ----------21BF------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK RECORD (FCB) | ||
+ | AH = BFh | ||
+ | AL = flags | ||
+ | bit 0: lock as well as log record | ||
+ | 1: non-exclusive lock | ||
+ | DS:DX -> opened FCB (see AH=0Fh) | ||
+ | BX:CX = offset | ||
+ | BP = lock timeout in timer ticks (1/18 sec) | ||
+ | SI:DI = length | ||
+ | Return: AL = error code (see AH=BCh) | ||
+ | SeeAlso: AH=BCh, | ||
+ | ----------21C0------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE RECORD (FCB) | ||
+ | AH = C0h | ||
+ | DS:DX -> FCB (see AH=0Fh) | ||
+ | BX:CX = offset | ||
+ | Return: AL = error code (see AH=BCh) | ||
+ | Note: | ||
+ | SeeAlso: AH=BDh, | ||
+ | ----------21C0------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = C0h | ||
+ | Return: AX = 0300h if " | ||
+ | AX = 1234h if " | ||
+ | SeeAlso: AX=BE00h, | ||
+ | ----------21C1------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR RECORD (FCB) | ||
+ | AH = C1h | ||
+ | DS:DX -> opened FCB (see AH=0Fh) | ||
+ | BX:CX = offset | ||
+ | Return: AL = error code (see AH=BCh) | ||
+ | Note: | ||
+ | SeeAlso: AH=BEh, | ||
+ | ----------21C1------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = C1h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AH=C0h" | ||
+ | ----------21C2------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - LOCK PHYSICAL RECORD SET | ||
+ | AH = C2h | ||
+ | AL = flags | ||
+ | bit 1: non-exclusive lock | ||
+ | BP = lock timeout in timer ticks (1/18 sec) | ||
+ | Return: AL = error code | ||
+ | 00h successful | ||
+ | FEh timed out | ||
+ | FFh failed | ||
+ | SeeAlso: AH=BFh, | ||
+ | ----------21C2------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = C2h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AH=C0h" | ||
+ | ----------21C3------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE PHYSICAL RECORD SET | ||
+ | AH = C3h | ||
+ | Return: AL = error code | ||
+ | Note: | ||
+ | SeeAlso: AH=C0h, | ||
+ | ----------21C301DXF1F1----------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = C301h | ||
+ | DX = F1F1h | ||
+ | Return: DX = 0E0Eh if resident | ||
+ | SeeAlso: AH=C0h" | ||
+ | ----------21C4------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR PHYSICAL RECORD SET | ||
+ | AH = C4h | ||
+ | Return: AL = error code | ||
+ | Note: | ||
+ | SeeAlso: AH=C1h | ||
+ | ----------21C5------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - SEMAPHORES | ||
+ | AH = C5h | ||
+ | AL = subfunction | ||
+ | 00h open semaphore | ||
+ | DS:DX -> semaphore name (counted string) | ||
+ | CL = initial value | ||
+ | Return: CX:DX = semaphore handle | ||
+ | BL = open count | ||
+ | 01h examine semaphore | ||
+ | Return: CX = semaphore value (sign extended) | ||
+ | DL = open count | ||
+ | 02h wait on semaphore | ||
+ | BP = timeout in timer ticks (1/18 sec) (0000h = no wait) | ||
+ | 03h signal semaphore | ||
+ | 04h close semaphore | ||
+ | CX:DX = semaphore handle (except function 00h) | ||
+ | Return: AL = error code | ||
+ | 00h successful | ||
+ | 01h semaphore value overflow | ||
+ | 96h out of string space on server | ||
+ | FEh invalid string length (AL=00h) or timeout | ||
+ | FFh invalid initial value (AL=00h) or invalid handle | ||
+ | ----------21C500----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = C500h | ||
+ | Return: AX = 6731h if resident | ||
+ | SeeAlso: AX=C301h" | ||
+ | ----------21C6------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - GET OR SET LOCK MODE | ||
+ | AH = C6h | ||
+ | AL = subfunction | ||
+ | 00h set old " | ||
+ | 01h set new extended locks mode | ||
+ | 02h get lock mode | ||
+ | Return: AL = current lock mode | ||
+ | ----------21C6------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = C6h | ||
+ | Return: AL = 55h if resident | ||
+ | SeeAlso: AX=C500h" | ||
+ | ----------21C603----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = C603h | ||
+ | CF set | ||
+ | Return: CF clear if resident | ||
+ | SeeAlso: AX=C500h" | ||
+ | ----------21C7------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0 - TRANSACTION TRACKING SYSTEM | ||
+ | AH = C7h | ||
+ | AL = subfunction | ||
+ | 00h begin transaction (NetWare SFT level II) | ||
+ | Return: AL = error code | ||
+ | 01h end transaction (NetWare SFT level II) | ||
+ | Return: AL = error code | ||
+ | CX:DX = transaction reference number | ||
+ | 02h TTS available (NetWare SFT level II) | ||
+ | Return: AL = completion code | ||
+ | 00h TTS not available | ||
+ | 01h TTS available | ||
+ | FDh TTS available but disabled | ||
+ | 03h abort transaction (NetWare SFT level II) | ||
+ | Return: AL = error code | ||
+ | 04h transaction status | ||
+ | 05h get application thresholds | ||
+ | 06h set application thresholds | ||
+ | 07h get workstation thresholds | ||
+ | 08h set workstation thresholds | ||
+ | Return: ??? | ||
+ | ----------21C700----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = C700h | ||
+ | Return: AL = 07h if resident | ||
+ | SeeAlso: AX=C603h" | ||
+ | ----------21C8------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0 - BEGIN LOGICAL FILE LOCKING | ||
+ | AH = C8h | ||
+ | if function C6h lock mode 00h: | ||
+ | DL = mode | ||
+ | 00h no wait | ||
+ | 01h wait | ||
+ | if function C6h lock mode 01h: | ||
+ | BP = timeout in timer ticks (1/18 sec) | ||
+ | Return: AL = error code | ||
+ | SeeAlso: AH=C9h | ||
+ | ----------21C9------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0 - END LOGICAL FILE LOCKING | ||
+ | AH = C9h | ||
+ | Return: AL = error code | ||
+ | SeeAlso: AH=C8h | ||
+ | ----------21CA------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - LOG/LOCK PERSONAL FILE (FCB) | ||
+ | AH = CAh | ||
+ | DS:DX -> FCB (see AH=0Fh) | ||
+ | if function C6h lock mode 01h: | ||
+ | AL = log and lock flag | ||
+ | 00h log file only | ||
+ | 01h lock as well as log file | ||
+ | BP = lock timeout in timer ticks (1/18 sec) | ||
+ | Return: AL = error code | ||
+ | 00h successful | ||
+ | 96h no dynamic memory for file | ||
+ | FEh timeout | ||
+ | FFh failed | ||
+ | SeeAlso: AH=CBh | ||
+ | ----------21CA15----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = CA15h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AH=CCh" | ||
+ | ----------21CB------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - LOCK FILE SET | ||
+ | AH = CBh | ||
+ | if function C6h lock mode 00h: | ||
+ | DL = mode | ||
+ | 00h no wait | ||
+ | 01h wait | ||
+ | if function C6h lock mode 01h: | ||
+ | BP = lock timeout in timer ticks (1/18 sec) | ||
+ | Return: AL = error code | ||
+ | 00h successful | ||
+ | FEh timed out | ||
+ | FFh failed | ||
+ | Note: | ||
+ | SeeAlso: AH=CAh | ||
+ | ----------21CB------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = CBh | ||
+ | Return: AL = 07h if resident | ||
+ | SeeAlso: AX=C700h" | ||
+ | ----------21CB02----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = CB02h | ||
+ | Return: AX = 02CBh if resident | ||
+ | SeeAlso: AX=CBh" | ||
+ | ----------21CC------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE (FCB) | ||
+ | AH = CCh | ||
+ | DS:DX -> FCB (see AH=0Fh) | ||
+ | Return: none | ||
+ | Note: | ||
+ | SeeAlso: AH=CAh, | ||
+ | ----------21CC------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = CCh | ||
+ | Return: AX = 0700h if resident | ||
+ | SeeAlso: AX=CB02h, | ||
+ | ----------21CD------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE SET | ||
+ | AH = CDh | ||
+ | Return: none | ||
+ | Note: | ||
+ | SeeAlso: AH=CAh, | ||
+ | ----------21CD------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = CDh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AH=CCh" | ||
+ | ----------21CE------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE (FCB) | ||
+ | AH = CEh | ||
+ | DS:DX -> FCB (see AH=0Fh) | ||
+ | Return: AL = error code | ||
+ | Note: | ||
+ | logged occurrences | ||
+ | SeeAlso: AH=CAh, | ||
+ | ----------21CF------------------------------- | ||
+ | INT 21 - LANstep - ??? | ||
+ | AH = CFh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | ----------21CF------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE SET | ||
+ | AH = CFh | ||
+ | Return: AL = 00h | ||
+ | Note: | ||
+ | SeeAlso: AH=CAh, | ||
+ | ----------21D0------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Banyan VINES, Alloy NTNX - LOCK LOGICAL RECORD | ||
+ | AH = D0h | ||
+ | DS:DX -> record string (counted string, max 100 data bytes) | ||
+ | if function C6h lock mode 01h: (Novell, NTNX only) | ||
+ | AL = flags | ||
+ | bit 0: lock as well as log the record | ||
+ | bit 1: non-exclusive lock | ||
+ | BP = lock timeout in timer ticks (1/18 sec) | ||
+ | Return: AL = error code | ||
+ | 00h successful | ||
+ | 96h no dynamic memory for file | ||
+ | FEh timed out | ||
+ | FFh unsuccessful | ||
+ | SeeAlso: AH=D1h, | ||
+ | ----------21D000----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = D000h | ||
+ | Return: BX = 1234h if resident | ||
+ | SeeAlso: AH=CCh" | ||
+ | ----------21D1------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Banyan VINES, Alloy NTNX - LOCK LOGICAL RECORD SET | ||
+ | AH = D1h | ||
+ | if function C6h lock mode 00h: | ||
+ | DL = mode | ||
+ | 00h no wait | ||
+ | 01h wait | ||
+ | if function C6h lock mode 01h: (Novell only) | ||
+ | BP = lock timeout in timer ticks (1/18 sec) | ||
+ | 0000h no wait | ||
+ | Return: AL = error code (see AH=D0h) | ||
+ | SeeAlso: AH=D0h, | ||
+ | ----------21D2------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - UNLOCK LOGICAL RECORD | ||
+ | AH = D2h | ||
+ | DS:DX -> semaphore identifier (counted string up to 100 chars long) | ||
+ | Return: AL = error code (see AH=D0h) | ||
+ | Note: | ||
+ | SeeAlso: AH=D0h, | ||
+ | ----------21D3------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0,Banyan VINES,Alloy NTNX - UNLOCK LOGICAL RECORD SET | ||
+ | AH = D3h | ||
+ | Return: AL = error code (see AH=D0h) | ||
+ | Note: | ||
+ | SeeAlso: AH=D1h, | ||
+ | ----------21D4------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - CLEAR LOGICAL RECORD | ||
+ | AH = D4h | ||
+ | DS:DX -> semaphore identifier (counted string up to 100 chars long) | ||
+ | Return: AL = error code | ||
+ | 00h successful | ||
+ | FFh not successful | ||
+ | Note: | ||
+ | SeeAlso: AH=D5h | ||
+ | ----------21D5------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0,Banyan VINES,Alloy NTNX - CLEAR LOGICAL RECORD SET | ||
+ | AH = D5h | ||
+ | Return: AL = error code (see AH=D4h) | ||
+ | Note: | ||
+ | of the requesting PC | ||
+ | SeeAlso: AH=D4h | ||
+ | ----------21D5------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = D5h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=D5AAh, | ||
+ | ----------21D5AA----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = D5AAh | ||
+ | Return: AX = 2A55h if " | ||
+ | AX = 2A03h if " | ||
+ | SeeAlso: AX=D000h, | ||
+ | ----------21D5AABPDEAA----------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = D5AAh | ||
+ | BP = DEAAh | ||
+ | Return: SI = 4321h if resident | ||
+ | SeeAlso: AX=D5AAh, | ||
+ | ----------21D6------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - END OF JOB | ||
+ | AH = D6h | ||
+ | Return: AL = error code | ||
+ | Note: | ||
+ | process, closes all files, resets error and lock modes, and releases | ||
+ | all network resources | ||
+ | SeeAlso: AH=BBh | ||
+ | ----------21D7------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - SYSTEM LOGOUT | ||
+ | AH = D7h | ||
+ | Return: AL = error code | ||
+ | ----------21D8------------------------------- | ||
+ | INT 21 - Novell NetWare, Banyan VINES - ALLOCATE RESOURCE | ||
+ | AH = D8h | ||
+ | DL = resource number | ||
+ | Return: AL = status | ||
+ | 00h successful | ||
+ | FFh unsucessful | ||
+ | SeeAlso: AH=D9h | ||
+ | ----------21D9------------------------------- | ||
+ | INT 21 - Novell NetWare, Banyan VINES - DEALLOCATE RESOURCE | ||
+ | AH = D9h | ||
+ | DL = resource number | ||
+ | Return: AL = status (see AH=D8h) | ||
+ | SeeAlso: AH=D8h | ||
+ | ----------21DA------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0 - GET VOLUME STATISTICS | ||
+ | AH = DAh | ||
+ | DL = volume number | ||
+ | ES:DI -> reply buffer (see below) | ||
+ | Return: AL = 00h | ||
+ | SeeAlso: AH=36h | ||
+ | |||
+ | Format of reply buffer: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 0Ah 16 BYTEs volume name, null padded | ||
+ | | ||
+ | Note: all words are big-endian (high byte first) | ||
+ | ----------21DADA----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = DADAh | ||
+ | Return: AH = A5h | ||
+ | SeeAlso: AX=D5AAh, | ||
+ | ----------21DAFE----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = DAFEh | ||
+ | Return: AX = 1234h if resident | ||
+ | SeeAlso: AX=DADAh, | ||
+ | ----------21DB------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - GET NUMBER OF LOCAL DRIVES | ||
+ | AH = DBh | ||
+ | Return: AL = number of local disks as set by LASTDRIVE in CONFIG.SYS | ||
+ | SeeAlso: AH=0Eh | ||
+ | ----------21DC------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - GET STATION NUMBER | ||
+ | AH = DCh | ||
+ | Return: AL = station number | ||
+ | 00h if NetWare not loaded or this machine is a non-dedicated server | ||
+ | CX = station number in ASCII | ||
+ | Note: | ||
+ | service | ||
+ | ----------21DC------------------------------- | ||
+ | INT 21 - PCMag PCMANAGE/ | ||
+ | AH = DCh | ||
+ | DX = state | ||
+ | 0000h turn on | ||
+ | 0001h turn off | ||
+ | SeeAlso: AX=FEDCh | ||
+ | ----------21DD------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - SET ERROR MODE | ||
+ | AH = DDh | ||
+ | DL = error mode | ||
+ | 00h invoke INT 24 on critical I/O errors | ||
+ | 01h return NetWare extended error code in AL | ||
+ | 02h return error code in AL, mapped to standard DOS error codes | ||
+ | Return: AL = previous error mode | ||
+ | ----------21DD------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = DDh | ||
+ | CX = number of bytes to copy | ||
+ | DS:SI -> source of copy | ||
+ | ES:DI -> destination of copy | ||
+ | Return: does not return normally; return address is caller' | ||
+ | AX = ??? | ||
+ | SeeAlso: AH=E0h" | ||
+ | ----------21DE------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0 - SET BROADCAST MODE | ||
+ | AH = DEh | ||
+ | AL = broadcast mode | ||
+ | 00h receive console and workstation broadcasts | ||
+ | 01h receive console broadcasts only | ||
+ | 02h receive no broadcasts | ||
+ | 03h store all broadcasts for retrieval | ||
+ | 04h get broadcast mode | ||
+ | 05h disable shell timer interrupt checks | ||
+ | 06h enable shell timer interrupt checks | ||
+ | Return: AL = old broadcast mode | ||
+ | ----------21DE------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = DEh | ||
+ | Return: AH = DFh if resident | ||
+ | SeeAlso: AX=DAFEh, | ||
+ | ----------21DE------------------------------- | ||
+ | INT 21 - VIRUS - "April 1st EXE" - ??? | ||
+ | AH = DEh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------21DEDE----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = DEDEh | ||
+ | Return: AH = 41h if resident | ||
+ | SeeAlso: AH=DEh" | ||
+ | ----------21DF------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - CAPTURE | ||
+ | AH = DFh | ||
+ | AL = subfunction | ||
+ | 00h start LPT capture | ||
+ | 01h end LPT capture | ||
+ | 02h cancel LPT capture | ||
+ | 03h flush LPT capture | ||
+ | 04h start specific capture | ||
+ | 05h end specific capture | ||
+ | 06h cancel specific capture | ||
+ | 07h flush specific capture | ||
+ | Return: AL = error code | ||
+ | Note: under NTNX, only AL=00h-03h are supported, and all four send a print | ||
+ | break (see INT 17/AH=84h) | ||
+ | ----------21E0------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - PRINT SPOOLING | ||
+ | AH = E0h | ||
+ | DS:SI -> request buffer | ||
+ | ES:DI -> reply buffer | ||
+ | subfunction in third byte of request buffer | ||
+ | 00h spool data to a capture file | ||
+ | 01h close and queue capture file | ||
+ | 02h set spool flags | ||
+ | 03h spool existing file | ||
+ | 04h get spool queue entry | ||
+ | 05h remove entry from spool queue | ||
+ | 06h get printer status | ||
+ | 09h create a disk capture file | ||
+ | Return: AL = error code | ||
+ | ----------21E0------------------------------- | ||
+ | INT 21 - OS/286, OS/386 - INITIALIZE REAL PROCEDURE | ||
+ | AH = E0h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AH=E1h" | ||
+ | ----------21E0------------------------------- | ||
+ | INT 21 - DoubleDOS - MENU CONTROL | ||
+ | AH = E0h | ||
+ | AL = subfunction | ||
+ | 01h exchange tasks | ||
+ | 73h resume invisible job if suspended | ||
+ | 74h kill other job | ||
+ | 75h suspend invisible job | ||
+ | Note: | ||
+ | SeeAlso: AH=F0h" | ||
+ | ----------21E0------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = E0h | ||
+ | Return: AX = 0300h if " | ||
+ | AX = DADAh if " | ||
+ | SeeAlso: AH=DEh" | ||
+ | ----------21E00F----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = E00Fh | ||
+ | Return: AX = 4C31h if resident | ||
+ | SeeAlso: AH=E0h" | ||
+ | ----------21E1------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0 - BROADCAST MESSAGES | ||
+ | AH = E1h | ||
+ | DS:SI -> request buffer | ||
+ | ES:DI -> reply buffer | ||
+ | subfunction in third byte of request buffer | ||
+ | 00h send broadcast message | ||
+ | 01h get broadcast message | ||
+ | 02h disable station broadcasts | ||
+ | 03h enable station broadcasts | ||
+ | 04h send personal message | ||
+ | 05h get personal message | ||
+ | 06h open message pipe | ||
+ | 07h close message pipe | ||
+ | 08h check pipe status | ||
+ | 09h broadcast to console | ||
+ | Return: AL = error code | ||
+ | ----------21E1------------------------------- | ||
+ | INT 21 - OS/286, OS/386 - ISSUE REAL PROCEDURE CALL | ||
+ | AH = E1h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AH=E0h" | ||
+ | ----------21E1------------------------------- | ||
+ | INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB | ||
+ | AH = E1h | ||
+ | SeeAlso: AH=E2h" | ||
+ | SeeAlso: AH=F1h" | ||
+ | ----------21E1------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = E1h | ||
+ | Return: AX = 0300h if " | ||
+ | AX = 0400h if "Fu Manchu" | ||
+ | SeeAlso: AX=E00Fh, | ||
+ | ----------21E2------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - DIRECTORY FUNCTIONS | ||
+ | AH = E2h | ||
+ | DS:SI -> request buffer | ||
+ | ES:DI -> reply buffer | ||
+ | subfunction in third byte of request buffer | ||
+ | 00h set directory handle | ||
+ | 01h get directory path | ||
+ | 02h scan directory information | ||
+ | 03h get effective directory rights | ||
+ | 04h modify maximum rights mask | ||
+ | 05h get volume number | ||
+ | 06h get volume name | ||
+ | 0Ah create directory | ||
+ | 0Bh delete directory | ||
+ | 0Ch scan directory for trustees | ||
+ | 0Dh add trustee to directory | ||
+ | 0Eh delete trustee from directory | ||
+ | 0Fh rename directory | ||
+ | 10h purge erased files | ||
+ | 11h restore erased file | ||
+ | 12h allocate permanent directory handle | ||
+ | 13h allocate temporary directory handle | ||
+ | 14h deallocate directory handle | ||
+ | 15h get volume info with handle | ||
+ | 16h allocate special temporary directory handle | ||
+ | 17h retrieve a short base handle (Advanced NetWare 2.0) | ||
+ | 18h restore a short base handle (Advanced NetWare 2.0) | ||
+ | 19h set directory information | ||
+ | Return: AL = error code | ||
+ | ----------21E2------------------------------- | ||
+ | INT 21 - OS/286, OS/386 - SET REAL PROCEDURE SIGNAL HANDLER | ||
+ | AH = E2h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AH=E0h" | ||
+ | ----------21E2------------------------------- | ||
+ | INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB | ||
+ | AH = E2h | ||
+ | AL = character | ||
+ | Return: AL = 00h successful | ||
+ | 01h buffer full (128 characters) | ||
+ | SeeAlso: AH=E1h" | ||
+ | SeeAlso: AH=F2h" | ||
+ | ----------21E3------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Alloy NTNX - CONNECTION CONTROL | ||
+ | AH = E3h | ||
+ | DS:SI -> request buffer | ||
+ | ES:DI -> reply buffer | ||
+ | subfunction in third byte of request buffer | ||
+ | 00h login | ||
+ | 01h change password | ||
+ | 02h map user to station set | ||
+ | 03h map object to number | ||
+ | 04h map number to object | ||
+ | 05h get station' | ||
+ | 06h get station' | ||
+ | 07h map group name to number | ||
+ | 08h map number to group name | ||
+ | 09h get memberset M of group G | ||
+ | 0Ah enter login area | ||
+ | 0Bh ??? | ||
+ | 0Ch ??? | ||
+ | 0Dh log network message | ||
+ | 0Eh get disk utilization (Advanced NetWare 1.0) | ||
+ | 0Fh scan file information (Advanced NetWare 1.0) | ||
+ | 10h set file information (Advanced NetWare 1.0) | ||
+ | 11h get file server information (Advanced NetWare 1.0) | ||
+ | 12h ??? | ||
+ | 13h get internet address (Advanced NetWare 1.02) | ||
+ | 14h login to file server (Advanced NetWare 2.0) | ||
+ | 15h get object connection numbers (Advanced NetWare 2.0) | ||
+ | 16h get connection information (Advanced NetWare 1.0) | ||
+ | 32h create object (Advanced NetWare 1.0) | ||
+ | 33h delete object (Advanced NetWare 1.0) | ||
+ | 34h rename object (Advanced NetWare 1.0) | ||
+ | 35h get object ID (Advanced NetWare 1.0) | ||
+ | 36h get object name (Advanced NetWare 1.0) | ||
+ | 37h scan object (Advanced NetWare 1.0) | ||
+ | 38h change object security (Advanced NetWare 1.0) | ||
+ | 39h create property (Advanced NetWare 1.0) | ||
+ | 3Ah delete property (Advanced NetWare 1.0) | ||
+ | 3Bh change property security (Advanced NetWare 1.0) | ||
+ | 3Ch scan property (Advanced NetWare 1.0) | ||
+ | 3Dh read property value (Advanced NetWare 1.0) | ||
+ | request buffer contains the property name in all caps | ||
+ | property " | ||
+ | 3Eh write property value (Advanced NetWare 1.0) | ||
+ | 3Fh verify object password (Advanced NetWare 1.0) | ||
+ | 40h change object password (Advanced NetWare 1.0) | ||
+ | 41h add object to set (Advanced NetWare 1.0) | ||
+ | 42h delete object from set (Advanced NetWare 1.0) | ||
+ | 43h is object in set? (Advanced NetWare 1.0) | ||
+ | 44h close bindery (Advanced NetWare 1.0) | ||
+ | 45h open bindery (Advanced NetWare 1.0) | ||
+ | 46h get bindery access level (Advanced NetWare 1.0) | ||
+ | 47h scan object trustee paths (Advanced NetWare 1.0) | ||
+ | C8h check console priviledges | ||
+ | C9h get file server description strings | ||
+ | CAh set file server date and time | ||
+ | CBh disable file server login | ||
+ | CCh enable file server login | ||
+ | CDh get file server login status | ||
+ | CEh purge all erased files | ||
+ | CFh disable transaction tracking | ||
+ | D0h enable transaction tracking | ||
+ | D1h send console broadcast | ||
+ | D2h clear connection number | ||
+ | D3h down file server | ||
+ | D4h get file system statistics | ||
+ | D5h get transaction tracking statistics | ||
+ | D6h read disk cache statistics | ||
+ | D7h get drive mapping table | ||
+ | D8h read physical disk statistics | ||
+ | D9h get disk channel statistics | ||
+ | DAh get connection' | ||
+ | DBh get list of a connection' | ||
+ | DCh get list of connections using a file | ||
+ | DDh get physical record locks by connection and file | ||
+ | DEh get physical record locks by file | ||
+ | DFh get logical records by connection | ||
+ | E0h get logical record information | ||
+ | E1h get connection' | ||
+ | E2h get semaphore information | ||
+ | E3h get LAN driver' | ||
+ | E5h get connection' | ||
+ | E6h get object' | ||
+ | E7h get server LAN I/O statistics | ||
+ | E8h get server miscellaneous information | ||
+ | E9h get volume information | ||
+ | Return: AL = error code | ||
+ | |||
+ | Format of object property: | ||
+ | Offset Size Description | ||
+ | 00h 1-16 BYTEs property name | ||
+ | N BYTE flags | ||
+ | bit 0: property is dynamic | ||
+ | 4: property belongs to set rather than item | ||
+ | | ||
+ | ??? | ||
+ | |||
+ | Values for security levels: | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Note: the above values are stored in a nybble; the high half-byte is write | ||
+ | access and the low half-byte is read access | ||
+ | |||
+ | Values for object type: | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------21E3------------------------------- | ||
+ | INT 21 - OS/286, OS/386 - ISSUE REAL INTERRUPT | ||
+ | AH = E3h | ||
+ | AL = interrupt number | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AH=E1h" | ||
+ | ----------21E3------------------------------- | ||
+ | INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB | ||
+ | AH = E3h | ||
+ | AL = character | ||
+ | Return: AL = 00h successful | ||
+ | 01h buffer full (128 characters) | ||
+ | SeeAlso: AH=E1h" | ||
+ | SeeAlso: AH=F3h" | ||
+ | ----------21E4------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0 - SET FILE ATTRIBUTES (FCB) | ||
+ | AH = E4h | ||
+ | CL = file attributes | ||
+ | bit 0: read only | ||
+ | 1: hidden | ||
+ | 2: system | ||
+ | 7: shareable | ||
+ | DX:DX -> FCB (see AH=0Fh) | ||
+ | Return: AL = error code | ||
+ | SeeAlso: AX=4301h | ||
+ | ----------21E4------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = E4h | ||
+ | Return: AH = 04h if resident | ||
+ | SeeAlso: AH=E1h" | ||
+ | ----------21E400----------------------------- | ||
+ | INT 21 - DoubleDOS - INSTALLATION CHECK/ | ||
+ | AX = E400h | ||
+ | Return: AL = 00h if DoubleDOS not present | ||
+ | = 01h if running in visible DoubleDOS partition | ||
+ | = 02h if running in the invisible DoubleDOS partition | ||
+ | SeeAlso: AH=E5h" | ||
+ | ----------21E400----------------------------- | ||
+ | INT 21 - OS/286, OS/386 - CHAIN TO REAL-MODE HANDLER | ||
+ | AX = E400h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | ----------21E402----------------------------- | ||
+ | INT 21 - OS/286, OS/386 - SET PROTECTED-MODE TASK GATE | ||
+ | AX = E402h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AX=E403h | ||
+ | ----------21E403----------------------------- | ||
+ | INT 21 - OS/286, OS/386 - REMOVE PROTECTED-MODE TASK GATE | ||
+ | AX = E403h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AX=E402h | ||
+ | ----------21E5------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0 - UPDATE FILE SIZE (FCB) | ||
+ | AH = E5h | ||
+ | DS:DX -> FCB (see AH=0Fh) | ||
+ | Return: AL = error code | ||
+ | ----------21E5------------------------------- | ||
+ | INT 21 - DoubleDOS - OTHER PROGRAM STATUS | ||
+ | AH = E5h | ||
+ | Return: AL = 00h no program in other partition | ||
+ | = 01h program in other partition is running | ||
+ | = 02h program in other partition is suspended | ||
+ | SeeAlso: AX=E400h" | ||
+ | ----------21E500----------------------------- | ||
+ | INT 21 - OS/286, OS/386 - HEAP MANAGEMENT STRATEGY | ||
+ | AX = E500h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=E501h | ||
+ | ----------21E501----------------------------- | ||
+ | INT 21 - OS/286, OS/386 - FORCE HEAP COMPACTION | ||
+ | AX = E501h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=E500h | ||
+ | ----------21E6------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0 - COPY FILE TO FILE (FCB) | ||
+ | AH = E6h | ||
+ | CX:DX = number of bytes to copy | ||
+ | DS:SI -> source FCB | ||
+ | ES:DI -> destination FCB | ||
+ | Return: AL = error code | ||
+ | ----------21E6------------------------------- | ||
+ | INT 21 P - OS/286, OS/386 - ISSUE REAL PROCEDURE SIGNAL FROM PROTECTED MODE | ||
+ | AH = E6h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AX=E2h" | ||
+ | ----------21E7------------------------------- | ||
+ | INT 21 - Novell NetWare 4.0, Banyan VINES - GET FILE SERVER DATE AND TIME | ||
+ | AH = E7h | ||
+ | DS:DX -> date/time buffer (see below) | ||
+ | Return: AL = error code | ||
+ | 00h successful | ||
+ | FFh unsuccessful | ||
+ | Note: also supported by Alloy NTNX | ||
+ | SeeAlso: AH=2Ah, | ||
+ | |||
+ | Format of date/time buffer: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------21E7------------------------------- | ||
+ | INT 21 - OS/286, OS/386 - CREATE CODE SEGMENT | ||
+ | AH = E7h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AH=E8h" | ||
+ | ----------21E7------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = E7h | ||
+ | Return: AH = 78h if resident | ||
+ | SeeAlso: AH=E4h" | ||
+ | ----------21E8------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - SET FCB RE-OPEN MODE | ||
+ | AH = E8h | ||
+ | DL = mode | ||
+ | 00h no automatic re-open | ||
+ | 01h auto re-open | ||
+ | Return: AL = error code | ||
+ | ----------21E8------------------------------- | ||
+ | INT 21 - OS/286, OS/386 - SEGMENT CREATION | ||
+ | AH = E8h | ||
+ | AL = type | ||
+ | 00h data segment | ||
+ | 01h data window/ | ||
+ | 02h real segment | ||
+ | 03h real window/ | ||
+ | 06h shareable segment | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AH=E7h" | ||
+ | ----------21E8------------------------------- | ||
+ | INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS | ||
+ | AH = E8h | ||
+ | AL = 00h set flags for this program | ||
+ | = 01h set flags for other program | ||
+ | DX = keyboard control flags (bit set enables, cleared disables | ||
+ | bit 0: menu | ||
+ | bit 1: exchange | ||
+ | bit 2: entire keyboard enable/ | ||
+ | bit 3: Ctrl-C | ||
+ | bit 4: Ctrl-PrtSc | ||
+ | bit 5: Alt/Erase | ||
+ | bit 6: Ctrl-Break | ||
+ | bit 7: Ctrl-NumLock | ||
+ | bit 8: shift-PrtSc | ||
+ | bit 9-13: undefined | ||
+ | bit 14: cancel key (clear keyboard buffer) | ||
+ | bit 15: suspend key | ||
+ | Return: DX = previous flags | ||
+ | Notes: | ||
+ | disabling any of the other keystrokes disables them completely | ||
+ | identical to AH=F8h | ||
+ | SeeAlso: AH=E1h" | ||
+ | SeeAlso: AH=F8h" | ||
+ | ----------21E9------------------------------- | ||
+ | INT 21 P - OS/286, OS/386 - CHANGE SEGMENTS | ||
+ | AH = E9h | ||
+ | AL = function | ||
+ | 01h change code segment parameters | ||
+ | 02h change data segment parameters | ||
+ | 05h adjust segment limit | ||
+ | 06h change segment base address | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AH=E7h" | ||
+ | SeeAlso: INT 31/ | ||
+ | ----------21E9------------------------------- | ||
+ | INT 21 - DoubleDOS - SET TIMESHARING PRIORITY | ||
+ | AH = E9h | ||
+ | AL = 00h visible program gets 70%, invisible gets 30% (default) | ||
+ | = 01h visible program gets 50%, invisible gets 50% | ||
+ | = 02h visible program gets 30%, invisible gets 70% | ||
+ | = 03h Top program gets 70%, bottom program gets 30% | ||
+ | = 04h Top program gets 30%, bottom program gets 70% | ||
+ | = 05h get current priority | ||
+ | Return: AL = priority setting | ||
+ | Note: | ||
+ | SeeAlso: AH=EAh" | ||
+ | ----------21E900----------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - SHELL' | ||
+ | AX = E900h | ||
+ | DX = drive number to check (0 = A:) | ||
+ | Return: AL = network pathbase | ||
+ | AH = base flags | ||
+ | 00h drive not currently mapped to a base | ||
+ | 01h drive is mapped to a permanent base | ||
+ | 02h drive is mapped to a temporary base | ||
+ | 03h drive exists locally | ||
+ | ----------21E905----------------------------- | ||
+ | INT 21 - Novell NetWare shell 3.01 - MAP A FAKE ROOT DIRECTORY | ||
+ | AX = E905h | ||
+ | BL = drive number (0=default, 1=A:, ...) | ||
+ | DS:DX -> ASCIZ path for fake root (may include server name or be empty) | ||
+ | Return: CF set on error | ||
+ | AL = error code (03h, | ||
+ | CF clear if successful | ||
+ | Note: if drive is not currently mapped, a drive mapping will be created | ||
+ | SeeAlso: AX=E906h | ||
+ | ----------21E906----------------------------- | ||
+ | INT 21 - Novell NetWare shell 3.01 - DELETE FAKE ROOT DIRECTORY | ||
+ | AX = E906h | ||
+ | BL = drive number (0=default, 1=A:, ...) | ||
+ | Note: drive remains mapped | ||
+ | SeeAlso: AX=E905h | ||
+ | ----------21E907----------------------------- | ||
+ | INT 21 - Novell NetWare shell 3.01 - GET RELATIVE DRIVE DEPTH | ||
+ | AX = E907h | ||
+ | BL = drive number (0=default, 1=A:, ...) | ||
+ | Return: AL = number of directories below the fake root | ||
+ | FFh if no fake root assigned | ||
+ | SeeAlso: AX=E905h | ||
+ | ----------21E908BL00------------------------- | ||
+ | INT 21 - Novell NetWare shell 3.01 - SET SHOW DOTS | ||
+ | AX = E908h | ||
+ | BL = 00h don' | ||
+ | = nonzero directory scans will return ' | ||
+ | Return: BL = previous show-dots setting | ||
+ | ----------21EA------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - RETURN SHELL VERSION | ||
+ | AH = EAh | ||
+ | AL = return version environment string | ||
+ | 00h don' | ||
+ | nonzero return string in 40-byte buffer pointed to by ES:DI | ||
+ | Return: buffer filled with three null-terminated entries: | ||
+ | major operating system | ||
+ | version | ||
+ | hardware type | ||
+ | Return: AH = operating system (00h = MSDOS) | ||
+ | AL = hardware type | ||
+ | 00h IBM PC | ||
+ | 01h Victor 9000 | ||
+ | BH = major shell version | ||
+ | BL = minor shell version | ||
+ | CH = (v3.01+) shell type | ||
+ | 00h conventional memory | ||
+ | 01h expanded memory | ||
+ | 02h extended memory | ||
+ | CL = shell revision number | ||
+ | ----------21EA------------------------------- | ||
+ | INT 21 - DoubleDOS - TURN OFF TASK SWITCHING | ||
+ | AH = EAh | ||
+ | Return: task switching turned off | ||
+ | SeeAlso: AH=E9h" | ||
+ | SeeAlso: INT FA" | ||
+ | ----------21EA------------------------------- | ||
+ | INT 21 - OS/286, OS/386 - ALLOCATE HUGE SEGMENT | ||
+ | AH = EAh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AH=E7h" | ||
+ | ----------21EB------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG FILE | ||
+ | AH = EBh | ||
+ | DS:DX -> ASCIZ filename | ||
+ | if function C6h lock mode 01h: | ||
+ | AL = flags | ||
+ | 00h log file only | ||
+ | 01h lock as well as log file | ||
+ | BP = lock timeout in timer ticks (1/18 second) | ||
+ | Return: AL = error code | ||
+ | 00h successful | ||
+ | 96h no dynamic memory for file | ||
+ | FEh timed out | ||
+ | FFh failed | ||
+ | SeeAlso: AH=CAh, | ||
+ | ----------21EB------------------------------- | ||
+ | INT 21 - DoubleDOS - TURN ON TASK SWITCHING | ||
+ | AH = EBh | ||
+ | Return: task switching turned on | ||
+ | SeeAlso: AH=E9h" | ||
+ | SeeAlso: INT FB" | ||
+ | ----------21EB00----------------------------- | ||
+ | INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY LINEAR ADDRESS | ||
+ | AX = EB00h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AX=EB02h, | ||
+ | ----------21EB02----------------------------- | ||
+ | INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 16-BIT SEGMENT: | ||
+ | AX = EB02h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AX=EB00h, | ||
+ | ----------21EB03----------------------------- | ||
+ | INT 21 - OS/386 VMM - FREE MAPPED PAGES | ||
+ | AX = EB03h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AX=EB05h, | ||
+ | ----------21EB04----------------------------- | ||
+ | INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 32-BIT SEGMENT: | ||
+ | AX = EB04h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AX=EB00h, | ||
+ | ----------21EB05----------------------------- | ||
+ | INT 21 - OS/386 VMM - MAP PAGES | ||
+ | AX = EB05h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AX=EB03h, | ||
+ | ----------21EB06----------------------------- | ||
+ | INT 21 - OS/386 VMM - LOCK PAGES IN MEMORY | ||
+ | AX = EB06h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AX=EB07h, | ||
+ | ----------21EB07----------------------------- | ||
+ | INT 21 - OS/386 VMM - UNLOCK MEMORY PAGES | ||
+ | AX = EB07h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AX=EB06h, | ||
+ | ----------21EC------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE FILE | ||
+ | AH = ECh | ||
+ | DS:DX -> ASCIZ filename | ||
+ | Return: none | ||
+ | SeeAlso: AH=EBh" | ||
+ | ----------21EC------------------------------- | ||
+ | INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS | ||
+ | AH = ECh | ||
+ | Return: ES = segment of virtual screen | ||
+ | Notes: | ||
+ | identical to AH=FCh | ||
+ | SeeAlso: AH=FCh" | ||
+ | ----------21EC------------------------------- | ||
+ | INT 21 - OS/286, OS/386 - BLOCK TRANSFER | ||
+ | AH = ECh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | ----------21EC59----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = EC59h | ||
+ | Return: BP = EC59h if resident | ||
+ | SeeAlso: AH=E7h" | ||
+ | ----------21ED------------------------------- | ||
+ | INT 21 - Novell NetWare, Alloy NTNX - CLEAR FILE | ||
+ | AH = EDh | ||
+ | DS:DX -> ASCIZ filename | ||
+ | Return: AL = error code | ||
+ | SeeAlso: AH=CEh, | ||
+ | ----------21ED------------------------------- | ||
+ | INT 21 - OS/286, OS/386 - GET SEGMENT OR WINDOW DESCRIPTOR | ||
+ | AH = EDh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | Note: | ||
+ | SeeAlso: AH=E9h" | ||
+ | ----------21EE------------------------------- | ||
+ | INT 21 - Novell NetWare 4.6, Alloy NTNX - GET PHYSICAL STATION NUMBER | ||
+ | AH = EEh | ||
+ | Return: CX:BX:AX = six-byte address | ||
+ | ----------21EE------------------------------- | ||
+ | INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS | ||
+ | AH = EEh | ||
+ | AL = number of 55ms time slices to give away | ||
+ | Return: returns after giving away time slices | ||
+ | SeeAlso: AH=FEh" | ||
+ | ----------21EE------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = EEh | ||
+ | Return: AX = 0300h if " | ||
+ | AL = 05h if " | ||
+ | SeeAlso: AH=DDh" | ||
+ | ----------21EF------------------------------- | ||
+ | INT 21 - Novell Advanced NetWare 1.0+ - GET DRIVE INFO | ||
+ | AH = EFh | ||
+ | AL = subfunction | ||
+ | 00h get drive handle table | ||
+ | 01h get drive flag table | ||
+ | 02h get drive connection ID table | ||
+ | 03h get connection ID table (see below) | ||
+ | 04h get file server name table | ||
+ | Return: ES:DI -> shell status table | ||
+ | Note: drive handle, flag, and connection ID tables each contain 32 entries | ||
+ | |||
+ | Format of connection ID table: | ||
+ | Offset Size Description | ||
+ | | ||
+ | E0h AES temporary | ||
+ | F8h IPX in critical section | ||
+ | FAh processing | ||
+ | FBh holding | ||
+ | FCh AES waiting | ||
+ | FDh waiting | ||
+ | FEh receiving | ||
+ | FFh sending | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Values in drive flag table: | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------21F0------------------------------- | ||
+ | INT 21 - Novell Advanced NetWare 1.0+ - CONNECTION ID | ||
+ | AH = F0h | ||
+ | AL = subfunction | ||
+ | 00h set preferred connection ID | ||
+ | 01h get preferred connection ID | ||
+ | 02h get default connection ID | ||
+ | 03h LPT capture active | ||
+ | 04h set primary connection ID | ||
+ | 05h get primary connection ID | ||
+ | DL = preferred file server | ||
+ | Return: AL = selected file server | ||
+ | ----------21F0------------------------------- | ||
+ | INT 21 - DoubleDOS - MENU CONTROL | ||
+ | AH = F0h | ||
+ | AL = subfunction | ||
+ | 01h exchange tasks | ||
+ | 73h resume invisible job if suspended | ||
+ | 74h kill other job | ||
+ | 75h suspend invisible job | ||
+ | Note: | ||
+ | SeeAlso: AH=E0h" | ||
+ | ----------21F0------------------------------- | ||
+ | INT 21 - VIRUS - "Frere Jacques" | ||
+ | AH = F0h | ||
+ | Return: AX = 0300h if resident | ||
+ | SeeAlso: AH=EEh" | ||
+ | ----------21F1------------------------------- | ||
+ | INT 21 - Novell Advanced NetWare 1.0+ - FILE SERVER CONNECTION | ||
+ | AH = F1h | ||
+ | AL = subfunction | ||
+ | 00h attach to file server | ||
+ | DL = preferred file server | ||
+ | 01h detach from file server | ||
+ | DL = connection ID | ||
+ | 02h logout from file server | ||
+ | DL = connection ID | ||
+ | Return: AL = completion code | ||
+ | ----------21F1------------------------------- | ||
+ | INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB | ||
+ | AH = F1h | ||
+ | SeeAlso: AH=E1h" | ||
+ | SeeAlso: AH=F8h" | ||
+ | ----------21F1------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = F1h | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: AH=F0h" | ||
+ | ----------21F2------------------------------- | ||
+ | INT 21 - Novell NetWare v3.01+ shell interface - MULTIPLEXOR | ||
+ | AH = F2h | ||
+ | AL = function | ||
+ | 15h broadcast services (see AH=E1h) | ||
+ | 17h connection control (see AH=E3h) | ||
+ | DS:SI -> request buffer | ||
+ | ES:DI -> reply buffer | ||
+ | Return: ??? | ||
+ | Notes: this is a multiplexor to access other net interface functions which | ||
+ | were accessed via a separate AH function in older versions | ||
+ | the function number in AL is added to CCh to get the old function | ||
+ | number which is desired | ||
+ | ----------21F2------------------------------- | ||
+ | INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB | ||
+ | AH = F2h | ||
+ | AL = character | ||
+ | Return: AL = 00h successful | ||
+ | 01h buffer full (128 characters) | ||
+ | SeeAlso: AH=E2h" | ||
+ | SeeAlso: AH=F8h" | ||
+ | ----------21F2AA----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = F2AAh | ||
+ | Return: AH = AAh if resident | ||
+ | SeeAlso: AH=F1h" | ||
+ | ----------21F3------------------------------- | ||
+ | INT 21 - Novell Advanced NetWare 2.0+ - FILE SERVER FILE COPY | ||
+ | AH = F3h | ||
+ | ES:DI -> request string (see below) | ||
+ | Return: AL = status/ | ||
+ | CX:DX = number of bytes copied | ||
+ | |||
+ | Format of request string: | ||
+ | Offset Size Description | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ----------21F3------------------------------- | ||
+ | INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB | ||
+ | AH = F3h | ||
+ | AL = character | ||
+ | Return: AL = 00h successful | ||
+ | 01h buffer full (128 characters) | ||
+ | SeeAlso: AH=E3h" | ||
+ | SeeAlso: AH=F8h" | ||
+ | ----------21F3------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = F3h | ||
+ | Return: AX = 0400h if resident | ||
+ | SeeAlso: AH=D5h" | ||
+ | ----------21F400----------------------------- | ||
+ | INT 21 - DoubleDOS - INSTALLATION CHECK/ | ||
+ | AX = F400h | ||
+ | Return: AL = 00h if DoubleDOS not present | ||
+ | = 01h if running in visible DoubleDOS partition | ||
+ | = 02h if running in the invisible DoubleDOS partition | ||
+ | SeeAlso: AX=E400h, | ||
+ | ----------21F5------------------------------- | ||
+ | INT 21 - DoubleDOS - OTHER PROGRAM STATUS | ||
+ | AH = F5h | ||
+ | Return: AL = 00h no program in other partition | ||
+ | = 01h program in other partition is running | ||
+ | = 02h program in other partition is suspended | ||
+ | SeeAlso: AH=E5h" | ||
+ | ----------21F7------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = F7h | ||
+ | Return: AX = 0300h if resident | ||
+ | SeeAlso: AH=F0h" | ||
+ | ----------21F8------------------------------- | ||
+ | INT 21 - DOS v??? - SET OEM INT 21 HANDLER | ||
+ | AH = F8h | ||
+ | DS:DX -> OEM INT 21 handler for functions F9h to FFh | ||
+ | FFFFh:FFFFh resets to original handlers | ||
+ | |||
+ | Notes: | ||
+ | function) if no handler set | ||
+ | handler is called with all registers exactly as set by caller, and | ||
+ | should exit with IRET | ||
+ | SeeAlso: AH=F9h" | ||
+ | ----------21F8------------------------------- | ||
+ | INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS | ||
+ | AH = F8h | ||
+ | AL = 00h set flags for this program | ||
+ | = 01h set flags for other program | ||
+ | DX = keyboard control flags (bit set enables, cleared disables) | ||
+ | bit 0: menu | ||
+ | bit 1: exchange | ||
+ | bit 2: entire keyboard enable/ | ||
+ | bit 3: Ctrl-C | ||
+ | bit 4: Ctrl-PrtSc | ||
+ | bit 5: Alt/Erase | ||
+ | bit 6: Ctrl-Break | ||
+ | bit 7: Ctrl-NumLock | ||
+ | bit 8: shift-PrtSc | ||
+ | bit 9-13: undefined | ||
+ | bit 14: cancel key (clear keyboard buffer) | ||
+ | bit 15: suspend key | ||
+ | Return: DX = previous flags | ||
+ | Notes: | ||
+ | disabling any of the other keystrokes disables them completely | ||
+ | identical to AH=E8h | ||
+ | SeeAlso: AH=E8h" | ||
+ | SeeAlso: AH=F3h" | ||
+ | ----------21F9------------------------------- | ||
+ | INT 21 - DOS v??? - OEM FUNCTION | ||
+ | AH = F9h | ||
+ | SeeAlso: AH=F8h" | ||
+ | ----------21F9------------------------------- | ||
+ | INT 21 - DoubleDOS - SET TIMESHARING PRIORITY | ||
+ | AH = F9h | ||
+ | AL = 00h visible program gets 70%, invisible gets 30% (default) | ||
+ | = 01h visible program gets 50%, invisible gets 50% | ||
+ | = 02h visible program gets 30%, invisible gets 70% | ||
+ | = 03h Top program gets 70%, bottom program gets 30% | ||
+ | = 04h Top program gets 30%, bottom program gets 70% | ||
+ | = 05h get current priority | ||
+ | Return: AL = priority setting | ||
+ | Note: | ||
+ | SeeAlso: AH=E9h" | ||
+ | ----------21FA------------------------------- | ||
+ | INT 21 - DOS v??? - OEM FUNCTION | ||
+ | AH = FAh | ||
+ | SeeAlso: AH=F9h" | ||
+ | ----------21FA------------------------------- | ||
+ | INT 21 - DoubleDOS - TURN OFF TASK SWITCHING | ||
+ | AH = FAh | ||
+ | Return: task switching turned off | ||
+ | SeeAlso: AH=EAh" | ||
+ | SeeAlso: INT FA" | ||
+ | ----------21FA--DX5945----------------------- | ||
+ | INT 21 - PC Tools 7 VDEFEND - API | ||
+ | AH = FAh | ||
+ | DX = 5945h | ||
+ | AL = function | ||
+ | 00h NOP | ||
+ | 01h uninstall | ||
+ | Return: CF clear if successful | ||
+ | DI = 4559h | ||
+ | 02h ??? | ||
+ | BL = ??? | ||
+ | Return: CF clear | ||
+ | CL = old value of ??? | ||
+ | SeeAlso: INT 2F/AX=6282h | ||
+ | ----------21FB------------------------------- | ||
+ | INT 21 - DOS v??? - OEM FUNCTION | ||
+ | AH = FBh | ||
+ | SeeAlso: AH=FAh" | ||
+ | ----------21FB------------------------------- | ||
+ | INT 21 - DoubleDOS - TURN ON TASK SWITCHING | ||
+ | AH = FBh | ||
+ | Return: task switching turned on | ||
+ | SeeAlso: AH=EBh" | ||
+ | SeeAlso: INT FB" | ||
+ | ----------21FB------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = FBh | ||
+ | Return: AH = 00h if resident | ||
+ | SeeAlso: AH=F7h" | ||
+ | ----------21FB0A----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = FB0Ah | ||
+ | Return: AX = 0AFBh if resident | ||
+ | SeeAlso: AH=FBh" | ||
+ | ----------21FC------------------------------- | ||
+ | INT 21 - DOS v??? - OEM FUNCTION | ||
+ | AH = FCh | ||
+ | SeeAlso: AH=FBh" | ||
+ | ----------21FC------------------------------- | ||
+ | INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS | ||
+ | AH = FCh | ||
+ | Return: ES = segment of virtual screen | ||
+ | Notes: | ||
+ | identical to AH=ECh | ||
+ | SeeAlso: AH=ECh" | ||
+ | ----------21FC------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = FCh | ||
+ | Return: AL = A5h if resident | ||
+ | SeeAlso: AH=FB0Ah" | ||
+ | ----------21FD------------------------------- | ||
+ | INT 21 - DOS v??? - OEM FUNCTION | ||
+ | AH = FDh | ||
+ | SeeAlso: AH=FCh" | ||
+ | ----------21FD------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = FDh | ||
+ | Return: AH = 13h if resident | ||
+ | SeeAlso: AH=FCh" | ||
+ | ----------21FE------------------------------- | ||
+ | INT 21 - DOS v??? - OEM FUNCTION | ||
+ | AH = FEh | ||
+ | SeeAlso: AH=FDh" | ||
+ | ----------21FE------------------------------- | ||
+ | INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS | ||
+ | AH = FEh | ||
+ | AL = number of 55ms time slices to give away | ||
+ | Return: returns after giving away time slices | ||
+ | SeeAlso: AH=EEh" | ||
+ | ----------21FE------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = FEh | ||
+ | Return: AH = 00h if resident | ||
+ | SeeAlso: AH=FDh" | ||
+ | ----------21FE01----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = FE01h | ||
+ | Return: AX = 01FEh if resident | ||
+ | SeeAlso: AH=FEh" | ||
+ | ----------21FE02----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = FE02h | ||
+ | Return: AX = 01FDh if resident | ||
+ | SeeAlso: AX=FE01h, | ||
+ | ----------21FEDC----------------------------- | ||
+ | INT 21 - PCMag PCMANAGE/ | ||
+ | AX = FEDCh | ||
+ | Return: AX = CDEFh if installed | ||
+ | SeeAlso: AH=DCh | ||
+ | ----------21FEDC----------------------------- | ||
+ | INT 21 - VIRUS - "Black Monday" | ||
+ | AX = FEDCh | ||
+ | Return: AL = DCh if resident | ||
+ | SeeAlso: AX=FE02h, | ||
+ | ----------21FF------------------------------- | ||
+ | INT 21 - DOS v??? - OEM FUNCTION | ||
+ | AH = FFh | ||
+ | SeeAlso: AH=FEh" | ||
+ | ----------21FF------------------------------- | ||
+ | INT 21 - CED (Command EDitor) - INSTALLABLE COMMANDS | ||
+ | AH = FFH | ||
+ | AL = subfunction | ||
+ | 00h add installable command | ||
+ | BL = mode - bit 0 = 1 callable from DOS prompt | ||
+ | bit 1 = 1 callable from application | ||
+ | DS:SI -> CR-terminated command name | ||
+ | ES:DI -> FAR routine entry point | ||
+ | 01h remove installable command | ||
+ | DS:SI -> CR-terminated command name | ||
+ | 02h reserved, may be used to test for CED installation | ||
+ | Return: CF clear if successful | ||
+ | CF set on error | ||
+ | AX = 01h invalid function | ||
+ | 02h command not found (subfunction 01h only) | ||
+ | 08h insufficient memory (subfunction 00h only) | ||
+ | 0Eh bad data (subfunction 00h only) | ||
+ | AH = FFh if CED not installed | ||
+ | Note: CED is a shareware DOS command-line enhancer by Christopher J. Dunford | ||
+ | SeeAlso: AX=0A00h | ||
+ | ----------21FF------------------------------- | ||
+ | INT 21 - DJ GO32.EXE 80386+ DOS extender - DOS EXTENSIONS | ||
+ | AH = FFh | ||
+ | AL = function | ||
+ | 01h create file | ||
+ | 02h open file | ||
+ | 03h get file statistics | ||
+ | 04h get time of day | ||
+ | 05h set time of day | ||
+ | 06h stat | ||
+ | 07h system | ||
+ | SeeAlso: INT 10/ | ||
+ | ----------21FF------------------------------- | ||
+ | INT 21 - DOSED.COM - INSTALLATION CHECK | ||
+ | AH = FFh | ||
+ | DS:SI -> " | ||
+ | ES = 0000h | ||
+ | Return: ES:DI -> " | ||
+ | Note: DOSED is a free DOS commandline editor/ | ||
+ | Huseby | ||
+ | ----------21FF------------------------------- | ||
+ | INT 21 - Topware Network Operating System - ??? | ||
+ | AH = FFh | ||
+ | ??? | ||
+ | Return: ??? | ||
+ | SeeAlso: INT 2F/AX=FF00h | ||
+ | ----------21FF------------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AH = FFh | ||
+ | Return: AH = 00h if "Tumen 0.5" or " | ||
+ | AX = 0400h if " | ||
+ | SeeAlso: AX=FEDCh" | ||
+ | ----------21FF00DX0078----------------------- | ||
+ | INT 21 - Rational Systems DOS/4G - INSTALLATION CHECK | ||
+ | AX = FF00h | ||
+ | DX = 0078h | ||
+ | Return: AL <> 00h if installed | ||
+ | GS = segment of kernel if nonzero | ||
+ | SeeAlso: INT 15/AX=BF02h | ||
+ | ----------21FF0F----------------------------- | ||
+ | INT 21 - FLU_SHOT+ v1.83 - INSTALLATION CHECK | ||
+ | AX = FF0Fh | ||
+ | Return: AX = 0101h if resident | ||
+ | Notes: | ||
+ | Software Concepts Design | ||
+ | the " | ||
+ | FLU_SHOT+ is present | ||
+ | SeeAlso: AH=FFh" | ||
+ | ----------21FF10----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = FF10h | ||
+ | Return: AL = 07h if resident | ||
+ | SeeAlso: AX=FF0Fh, | ||
+ | ----------21FFFE----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = FFFEh | ||
+ | Return: AX = 0815h if resident | ||
+ | SeeAlso: AX=FF10h, | ||
+ | ----------21FFFF----------------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = FFFFh | ||
+ | Return: AX = 0000h if " | ||
+ | AX = 07C2h (1992) if "Year 1992"/" | ||
+ | SeeAlso: AX=FF0Fh, | ||
+ | ----------21FFFFCX0000----------------------- | ||
+ | INT 21 - VIRUS - " | ||
+ | AX = FFFFh | ||
+ | CX = 0000h | ||
+ | Return: CX = 0006h if resident | ||
+ | SeeAlso: AX=FFFFh, |