💾 Archived View for uscoffings.net › retro-computing › components › PC › interrupts › INTERRUP.N captured on 2024-07-09 at 01:00:47.
⬅️ Previous capture (2022-07-16)
-=-=-=-=-=-=-
Interrupt List, part 14 of 18 Copyright (c) 1989-1999,2000 Ralf Brown --------F-2FDA00----------------------------- INT 2F - ZyXEL ZFAX v1.x - INSTALLATION CHECK AX = DA00h Return: AH = enabled state (00h = enabled, 01h = disabled) AL = 5Ah installed Program: ZFAX is the bundled FAX software which comes with the ZyXEL model fax modems. Note: This function, and the other DAxxh functions, may apply only to version 1 of the software; see AX=DB00h for the version 2 installation check SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h,AX=DB00h --------F-2FDA01----------------------------- INT 2F - ZyXEL ZFAX v1.x - UNINSTALL AX = DA01h Return: AL = 00h Success 01h Failure SeeAlso: AX=DA00h,AX=DB01h --------F-2FDA02----------------------------- INT 2F - ZyXEL ZFAX v.1x - DISABLE AX = DA02h Return: AL = 00h SeeAlso: AX=DA03h,AX=DB02h --------F-2FDA03----------------------------- INT 2F - ZyXEL ZFAX v1.x - ENABLE AX = DA03h Return: AL = 00h SeeAlso: AX=DA02h,AX=DB03h --------G-2FDA55----------------------------- INT 2F U - TRAP.COM - INSTALLATION CHECK AX = DA55h DL = interrupt number DH = ??? Return: if installed AH = interrupt number AL = ??? ES:BX -> ??? Program: TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel Note: a separate copy of TRAP is loaded for each interrupt to be traced; thus the interrupt number is part of the installation check --------N-2FDAB2----------------------------- INT 2F U - Beame&Whiteside BWSNMP - INSTALLATION CHECK AX = DAB2h Return: AX = 00FFh if installed BX:CX -> MIB table Program: BWSNMP is part of the BW-NFS package SeeAlso: INT 62/AH=00h"ETHDEV" --------F-2FDB00----------------------------- INT 2F - ZyXEL ZFAX v2+ - INSTALLATION CHECK AX = DB00h Return: AL = 5Bh if installed (v2.x) ES:BX -> configuration table??? AX = 00DBh if installed (v3) ES:BX -> ZFAX configuration table (see #03092) Program: ZFAX is the bundled FAX software which comes with the ZyXEL model Fax modems. SeeAlso: AX=CBDCh,AX=DA00h,AX=DB01h,AX=DB02h,AX=DB03h Format of ZFAX Configuration Table: Offset Size Description (Table 03092) 00h WORD table version number (0300h for v3.0-v4.01) 02h BYTE reserved 03h 70 BYTEs ZFAX working path 49h 128 BYTEs path to external editor C9h 128 BYTEs path to external terminal emulator 149h 128 BYTEs path to Ring Shell 1C9h 128 BYTEs path to DOS Shell 249h 128 BYTEs path to Data Shell 2C9h 70 BYTEs path to Chinese font 30Fh BYTE printer type (see #03093) 310h BYTE printer port (00h = LPT1, etc.) 311h BYTE type of graphics adapter (00h auto-detect, 01h VGA, 02h EGA, 03h CGA, 04h Hercules) 312h BYTE display type (00h auto-detect, 01h LCD, 02h color, 03h mono) 313h BYTE scan code for ZFAX hotkey (see #00006) 314h BYTE shift mask for ZFAX hotkey 315h BYTE tone/pulse dialing (00h tone, 01h pulse) 316h BYTE Caller ID (00h disabled, 01h enabled) 317h BYTE Distinctive Ring (00h disabled, 01h enabled) 318h BYTE normal ring answer type (see #03094) 319h BYTE Ring 1 answer type (see #03094) 31Ah BYTE Ring 2 answer type (see #03094) 31Bh BYTE Ring 3 answer type (see #03094) 31Ch BYTE COM port for modem 31Dh BYTE speaker volume (00h-07h) 31Eh BYTE modem dial timer, seconds 31Fh WORD user-defined COM port I/O address 321h BYTE user-defined COM port IRQ number 322h 81 BYTEs dial prefix string 373h 79 BYTEs dial postfix string 3C2h BYTE ring count until automatic answer 3C3h BYTE retry count on busy signal 3C4h BYTE redial delay in seconds 3C5h WORD system password 3C7h BYTE reserved 3C8h BYTE voice file compression format 00h CELP at 9600bps 01h two-bit ADPCM at 19200bps 02h three-bit ADPCM at 28800bps 3C9h BYTE voice system: DTMF 0 action (see #03095) 3CAh BYTE voice system: DTMF 1 action 3CBh BYTE voice system: DTMF 2 action 3CCh BYTE voice system: DTMF 3 action 3CDh BYTE voice system: DTMF 4 action 3CEh BYTE voice system: DTMF 5 action 3CFh BYTE voice system: DTMF 6 action 3D0h BYTE voice system: DTMF 7 action 3D1h BYTE voice system: DTMF 8 action 3D2h BYTE voice system: DTMF 9 action (see #03095) 3D3h WORD reserved 3D5h 25 BYTEs local FAX ID to display on page header 3EEh 20 BYTEs local FAX ID sent to remote FAX 402h BYTE FAX page size 00h A4 (210x297mm) 01h B4 (250x353mm) 02h A3 (297x420mm) 403h BYTE FAX resolution 00h normal (3.85 pixels/mm) 01h high (7.7 pixels/mm) 404h BYTE FAX coding scheme 00h 1-D, modified Huffman coding 01h 2-D, modified READ coding 405h BYTE left margin for text in millimeters 406h BYTE vertical insertion for text in mm (0-20) 407h BYTE horizontal insertion in mm (0-20) 408h BYTE maximum text lines per page 409h BYTE text type (00h ASCII, 01h WordStar-formatted) 40Ah BYTE PCX image resize (00h disabled, 01h enabled) 40Bh BYTE AutoPrint (00h disabled, 01h enabled) 40Ch BYTE cover page (00h disabled, 01h enabled) 40Dh 81 BYTEs cover page logo filename 45Eh 65 BYTEs cover page sender name 49Fh BYTE print capture (00h disabled, 01h enabled) 4A0h BYTE send immediately (00h disabled, 01h enabled) 4A1h BYTE print capture printer port 4A2h BYTE print capture timer in seconds 4A3h BYTE scan code for print capture hotkey (see #00006) 4A4h BYTE shift mask for print capture hotkey 4A5h BYTE DataShell type 00h internal Zmodem, 01h Data Shell, 02h disable 4A6h BYTE video I/O type 00h auto-detect, 01h use BIOS, 02h direct writes 4A7h BYTE call transfer digits (0-9) 4A8h WORD voice recorder maximum time in seconds (0-999) (Table 03093) Values for ZFAX printer type: 00h EPSON FX (9 pins) 01h EPSON LQ (24 pins) 02h HP Laser Jet II, letter size 03h HP Laser Jet II, legal size 04h HP Laser Jet II, A4 size 05h HP Laser Jet III, letter size 06h HP Laser Jet III, legal size 07h HP Laser Jet III, A4 size SeeAlso: #03092 (Table 03094) Values for Ring Answer Type: 00h voice system 01h FAX only 02h Data Shell 03h Ring Shell 04h DOS Shell 05h ignore SeeAlso: #03092 (Table 03095) Values for DTMF action: 00h none 01h page operator 02h FaxBack 03h announcement 04h call transfer 05h receive FAX 06h receive data 07h voice mailbox 08h DOS Shell Out 09h Data Shell Out SeeAlso: #03092 --------U-2FDB00----------------------------- INT 2F U - WINGO.COM - INSTALLATION CHECK AX = DB00h Return: AX = FFFFh if installed CX = 5749h ('WI') if installed DX = 4E47h ('NG') if installed ES = segment of resident code Program: WINGO.COM is TSR for starting Windows programs from DOS prompt (together with companion Windows program WINSTART.EXE) written by Douglas Boling, contributing editor of PC Magazine Range: AH=DBh to AH=FFh, selected by scanning for a free multiplex number SeeAlso: AX=DB01h"WINGO",AX=DB02h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO" SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO" --------F-2FDB01----------------------------- INT 2F - ZyXEL ZFAX v2+ - UNINSTALL AX = DB01h Return: AX = status 0000h successful 0001h ZFAX is busy 0002h another program resident above ZFAX Note: this function unhooks the vectors taken by the ZFAX TSR if they have not been hooked by other TSRs and releases the TSR's memory ZFAX v2.x crashes the contributor's machine when this function is called SeeAlso: AX=DA01h,AX=DB00h"ZFAX",AX=DB02h"ZFAX" --------U-2FDB01----------------------------- INT 2F U - WINGO.COM - SET CALLBACK FUNCTION POINTER AX = DB01h CX:DX -> new callback function Return: AX = 0000h CX:DX -> end of resident code (stack ???) Desc: the callback function is used for WINGO <-> WINSTART communication SeeAlso: AX=DB00h"WINGO",AX=DB02h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO" SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO" --------F-2FDB02----------------------------- INT 2F - ZyXEL ZFAX v2.x - DISABLE AX = DB02h Return: AL = 00h SeeAlso: AX=DA02h,AX=DB00h"ZFAX",AX=DB01h"ZFAX",AX=DB03h"ZFAX" --------U-2FDB02----------------------------- INT 2F U - WINGO.COM - RESET CALLBACK FUNCTION POINTER AX = DB02h Return: AX = 0000h Desc: the callback function is used for WINGO <-> WINSTART communication SeeAlso: AX=DB00h"WINGO",AX=DB01h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO" SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO" --------F-2FDB03----------------------------- INT 2F - ZyXEL ZFAX v2.x - ENABLE AX = DB03h Return: AL = 00h SeeAlso: AX=DA03h,AX=DB00h"ZFAX",AX=DB02h"ZFAX" --------U-2FDB03----------------------------- INT 2F U - WINGO.COM - SET ??? FLAG AX = DB03h Return: AX = 0000h SeeAlso: AX=DB00h"WINGO",AX=DB04h"WINGO",AX=DB05h"WINGO",AX=DB06h"WINGO" --------U-2FDB04----------------------------- INT 2F U - WINGO.COM - RESET ??? FLAG AX = DB04h Return: AX = 0000h SeeAlso: AX=DB00h"WINGO",AX=DB03h"WINGO",AX=DB05h"WINGO",AX=DB06h"WINGO" --------U-2FDB05----------------------------- INT 2F U - WINGO.COM - GET ??? FLAG AX = DB05h Return: AX = 0000h DX = unknown flag - 0 or 1 Program: WINGO.COM is TSR for starting Windows programs from DOS prompt (together with companion Windows program WINSTART.EXE) written by Douglas Boling, contributing editor of PC Magazine SeeAlso: AX=DB00h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO" --------U-2FDB06----------------------------- INT 2F U - WINGO.COM - CALL CALLBACK FUNCTION AX = DB06h Return: AX = return value of INT 2F/AX=1685h Note: uses Windows service INT 2F/AX=1685h (SWITCH VMs AND CALLBACK) to call the callback function previously set by AX=DB01h used for WINGO <-> WINSTART communication SeeAlso: AX=1685h, AX=DB00h"WINGO",AX=DB01h"WINGO",AX=DB02h"WINGO", SeeAlso: AX=DB03h"WINGO",AX=DB04h"WINGO",AX=DB05h"WINGO" --------F-2FDB10----------------------------- INT 2F - ZyXEL ZFAX v3+ - EXECUTE ZFAX MAIN MENU AX = DB10h SeeAlso: AX=DB00h"ZFAX",AX=DB11h"ZFAX" --------F-2FDB11----------------------------- INT 2F - ZyXEL ZFAX v3+ - SEND FAX AX = DB11h DS:SI -> filename including path (max 128 characters) DS:BX -> remote FAX number Return: AX = status (see #03096) SeeAlso: AX=DB00h"ZFAX",AX=DB12h,AX=DB13h,AX=DB14h,AX=DB15h,AX=DB20h,AX=DB21h (Table 03096) Values for ZFAX status: 00h OK 01h invalid DOS function 02h file not found 03h path not found 04h no file handle available 05h access denied by DOS 06h invalid handle 07h disk full 10h printer error 11h no graphics font 12h no ZFAX font 20h DCD dropped while sending 21h not ZyXEL modem 22h busy 23h no response from COM port 24h no carrier 25h no dial tone 26h no answer 27h no response 28h failed to send FAX 30h user aborted 40h critical error on disk 50h parameter error --------F-2FDB12----------------------------- INT 2F - ZyXEL ZFAX v3+ - PRINT FAX AX = DB12h DS:SI -> filename, including path (max 128 characters) Return: AX = status (see #03096) SeeAlso: AX=DB11h,AX=DB13h,AX=DB14h --------F-2FDB13----------------------------- INT 2F - ZyXEL ZFAX v3+ - CONVERT FAX AX = DB13h DS:SI -> source filename, including path (max 128 characters) DS:BX -> destination filename, including path (max 80 characters) CX = destination file format 00h FAX, 01h PCX, 02h TIFF, 03h PRN Return: AX = status (see #03096) SeeAlso: AX=DB11h,AX=DB12h,AX=DB14h,AX=DB22h --------F-2FDB14----------------------------- INT 2F - ZyXEL ZFAX v3+ - VIEW FAX AX = DB14h DS:SI -> source filename, including path (max 128 characters) Return: AX = status (see #03096) SeeAlso: AX=DB11h,AX=DB12h,AX=DB14h --------F-2FDB15----------------------------- INT 2F - ZyXEL ZFAX v4.01 - SEND FAX WITH LOGO AND SIGNATURE AX = DB15h DS:SI -> source filename, including path (max 128 characters) DS:BX -> remote FAX number DS:CX -> Logo filename DS:DX -> Signature filename Return: AX = status (see #03096) SeeAlso: AX=DB00h"ZFAX",AX=DB11h --------F-2FDB16----------------------------- INT 2F - ZyXEL ZFAX v4.01 - QUOTE PREVIOUS STATUS AX = DB16h Return: DX:AX -> previous receive state transaction log (see #03097) BX = type (00h incoming FAX, 01h incoming data, 02h incoming voice) SeeAlso: AX=DB00h"ZFAX",AX=DB11h,AX=DB17h Format of ZFAX transaction log receive state: Offset Size Description (Table 03097) 00h WORD year 02h WORD date 04h WORD time 06h WORD extension number 08h WORD type: 00h incoming FAX, 01h outgoing FAX, 02h voice message 0Ah WORD status: 00h normal, 01h remote delete 0Ch 125 BYTEs filename 89h 24 BYTEs caller ID A1h 20 BYTEs FAX number B5h 20 BYTEs remote FAX ID C9h WORD error code CBh WORD connection direction (00h transmit, 01h receive) CDh BYTE connection time minutes CEh BYTE connection time seconds CFh BYTE ??? D0h WORD connection speed (24, 48, 72, 96, 12, 144) D2h WORD connection page size (A4, B4, A3) D4h WORD connection coding scheme (1-DN, 1-DH, 2-DN, 2-DH) D6h WORD page count --------F-2FDB17----------------------------- INT 2F - ZyXEL ZFAX v4.01 - BEGIN RECEIVING INCOMING CALL AX = DB17h Return: AX = status (0000h successful, 0001h unable to start at this time) SeeAlso: AX=DB00h"ZFAX" --------F-2FDB18----------------------------- INT 2F - ZyXEL ZFAX v4.01 - SCHEDULE CALL AX = DB18h DS:SI -> schedule data (see #03097) Return: AX = status (see #03096) SeeAlso: AX=DB00h"ZFAX" --------F-2FDB20----------------------------- INT 2F - ZyXEL ZFAX v3+ - POLL FAX AX = DB20h DS:SI -> remote FAX number Return: AX = status (see #03096) SeeAlso: AX=DB11h,AX=DB21h --------F-2FDB21----------------------------- INT 2F - ZyXEL ZFAX v3+ - SEND VOICE AX = DB21h DS:SI -> filename including path (max 128 characters) DS:BX -> remote phone number Return: AX = status (see #03096) SeeAlso: AX=DB11h,AX=DB20h,AX=DB22h,AX=DB23h,AX=DB24h --------F-2FDB22----------------------------- INT 2F - ZyXEL ZFAX v3+ - CONVERT VOICE FILE AX = DB22h DS:SI -> source filename, including path (max 128 characters) DS:BX -> destination filename, including path (max 80 characters) CX = destination format 00h two-bit ADPCM, 01h three-bit ADPCM, 02h VOC Return: AX = status (see #03096) SeeAlso: AX=DB13h,AX=DB20h,AX=DB21h,AX=DB23h --------F-2FDB23----------------------------- INT 2F - ZyXEL ZFAX v3+ - RECORD VOICE FILE AX = DB23h DS:SI -> destination filename, including path (max 128 characters) CX = recording channel (0 = telephone line, 1 = microphone/speaker) DX = voice file format 00h CELP, 01h two-bit ADPCM, 02h three-bit ADPCM Return: AX = status (see #03096) SeeAlso: AX=DB21h,AX=DB22h,AX=DB24h --------F-2FDB24----------------------------- INT 2F - ZyXEL ZFAX v3+ - PLAY VOICE FILE AX = DB24h DS:SI -> name of voice file, including path (max 128 characters) CX = playback channel (0 = telephone line, 1 = microphone/speaker) Return: AX = status (see #03096) SeeAlso: AX=DB21h,AX=DB22h,AX=DB24h --------F-2FDB25----------------------------- INT 2F - ZyXEL ZFAX v3+ - ANSWER MODEM WITH VOICE SYSTEM AX = DB25h Return: AX = status (see #03096) SeeAlso: AX=DB21h,AX=DB22h,AX=DB26h,AX=DB27h,AX=DB28h --------F-2FDB26----------------------------- INT 2F - ZyXEL ZFAX v3+ - DIAL PHONE AX = DB26h DS:SI -> remote phone number Return: AX = status (see #03096) SeeAlso: AX=DB25h --------F-2FDB27----------------------------- INT 2F - ZyXEL ZFAX v3+ - RECEIVE FAX - ANSWER MODEM AND SET TO FAX MODE AX = DB27h Return: AX = status (see #03096) SeeAlso: AX=DB25h,AX=DB28h --------F-2FDB28----------------------------- INT 2F - ZyXEL ZFAX v3+ - RECEIVE FAX DATA - ANSWER MODEM IN MULTI-AUDIO MODE AX = DB28h Return: AX = status (see #03096) SeeAlso: AX=DB25h,AX=DB27h,AX=DB41h --------F-2FDB40----------------------------- INT 2F - ZyXEL ZFAX v3+ - INTERNAL TERMINAL AX = DB40h Return: AX = status (see #03096) SeeAlso: AX=DB00h --------F-2FDB41----------------------------- INT 2F - ZyXEL ZFAX v3+ - SEND DATA - DIAL NUMBER AND UPLOAD FILE WITH ZMODEM AX = DB41h DS:SI -> source file name, including path (max 128 characters) DS:BX -> remote data number Return: AX = status (see #03096) SeeAlso: AX=DB00h,AX=DB28h --------K-2FDC00----------------------------- INT 2F - GOLD.COM - INSTALLATION CHECK AX = DC00h Return: AL = state 00h not installed FFh installed Program: GOLD is a TSR by Bob Eager which makes the NumLock key return the code for F1; the purpose is to improve Kermit's VTxxx emulation --------K-2FDC01----------------------------- INT 2F - GOLD.COM - GET STATE AX = DC01h Return: AL = status 00h off 01h on SeeAlso: AX=DC00h,AX=DC02h --------K-2FDC02----------------------------- INT 2F - GOLD.COM - SET STATE AX = DC02h DL = new state 00h off 01h on Return: AL = 00h (OK) SeeAlso: AX=DC01h --------t-2FDD------------------------------- INT 2F - CappaCom programs - API AH = DDh AL = 00h general installation check Return: AL = FFh if any CappaCom programs are resident AL = FEh get info Return: ES:BX -> TSR info list (see #03098) AL = program identifier BH = function FDh get version Return: BX = version FFh installation check Return: AL = FFh if installed BX = version ES = segment of resident code others vary by program Return: AL = status bit 7 set on error AL = 81h unknown function Note: CappaCom was originally SoftCom but changed its name due to a trademark conflict Index: installation check;SoftCom programs Index: installation check;CappaCom programs Format of CappaCom TSR info list: Offset Size Description (Table 03098) 00h 9 BYTEs blank-padded ASCIZ program name 09h BYTE program ID 0Ah WORD program's PSP segment 0Ch WORD program version (major in high byte) 0Eh DWORD pointer to next item in info list or 0000h:0000h 12h BYTE number of interrupts hooked 13h 5 BYTEs interrupt numbers hooked by program 18h 8 BYTEs reserved ----------2FDD------------------------------- INT 2F - MIXFIX.EXE - API AH = DDh AL = function 00h installation check Return: AX = 00DDh if installed BX = version (BH = major, BL = minor) 41h/61h get From: address Return: AX = 0001h ES:BX -> ASCIZ 4d address of mail sender ("1:2/3.4") 49h/69h get To: address Return: AX = 0001h ES:BX -> ASCIZ 4d address of recipient ("1:2/3.4") 4Ah/6Ah get subject of mail Return: AX = 0001h ES:BX -> ASCIZ subject of handled mail 4Dh/6Dh get mail name Return: AX = 0001h ES:BX -> ASCIZ full name of current mail file 4Eh/6Eh get From: field Return: AX = 0001h ES:BX -> ASCIZ From: field of mail (mail sender's name) Program: MIXFIX by "KIV without Co" is a FidoNet mail robot which may execute other programs for mail handling. The called programs may use the services described here to retrieve information about the mail being handled. Index: installation check;MIXFIX.EXE --------d-2FDD--BX7844----------------------- INT 2F - xDISK v3.32+ - INSTALLATION CHECK AH = DDh BX = 7844h ('xD') CX = 4953h ('IS') DX = 4B3Fh ('K?') AL = desired drive (01h-1Ah) or 00h to check for xDISK on any drive ES:DI -> 25-byte data buffer (see #03099) Return: AX = DDFFh if installed (on specified drive if AL nonzero on entry) BX = 87BBh DX = B4C0h ES:DI buffer filled CX,CF destroyed SeeAlso: INT 21/AX=4404h"xDISK",INT 21/AX=4405h"xDISK" Format of xDISK data buffer: Offset Size Description (Table 03099) 00h DWORD pointer to ASCIZ driver signature "xDISK unit: X" 04h BYTE flag: 01h if disk linked to DOS, 00h if unlinked 05h BYTE flag: 01h if write protected, 00h if not 06h BYTE flag: 01h if root directory full, 00h if not 07h BYTE flag: 01h if free space uncompacted, 00h if compacted 08h BYTE resizing state: 00h not resizable, 01h resized, 80h resizable 09h BYTE flag: 01h inelastic resizable disk, 00h elastic 0Ah 2 BYTEs reserved 0Ch BYTE flag: 01h collapsed disk, 00h not collapsed 0Dh BYTE flag: 01h using all EMS, 00h some EMS free 0Eh BYTE flag: 01h password enabled, 00h disabled 0Fh BYTE flag: 01h password audio feedback, 00h no feedback 10h BYTE flag: 01h password video feedback, 00h no feedback 11h BYTE flag: 01h confirm changes, 00h no confirmation 12h BYTE flag: 01h terse display, 00h verbose display 13h BYTE flag: 01h click speaker on disk access, 00h no click 14h BYTE flag: 01h flash icon on disk access, 00h no icon flash 15h BYTE FAT entry size: 00h 12-bit, FFh 16-bit 16h WORD count of open files in RAM disk 18h BYTE unused --------N-2FDE00BL00------------------------- INT 2F U - Novell Netware - RPRINTER, NPRINTER - INSTALLATION CHECK AX = DE00h BL = 00h Return: AL = FFh If Rprinter/Nprinter Installed BX -> Program Segment Prefix N/Rprinter.exe --------Q-2FDE00BX4456----------------------- INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK AX = DE00h BX = 4456h ("DV") CX = 5844h ("XD") DX = 4931h ("I1") Return: AL = FFh if installed (even if other registers do not match) if BX,CX, and DX were as specified on entry, BX = 4845h ("HE") CX = 5245h ("RE") DX = 4456h ("DV") Range: AH=C0h to AH=FFh, selected by scanning AH=DEh-FFh, then AH=C0h-DDh Note: the XDI handler should not issue any DOS or BIOS calls, nor should it issue DESQview API calls other than those allowed from hardware ints SeeAlso: AX=DE02h,INT 15/AX=5400h --------Q-2FDE01----------------------------- INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION AX = DE01h BX = driver ID other registers as needed by driver Notes: XDI drivers should pass this call through to previous handler if ID does not match DESQview never calls this function --------Q-2FDE01BX4450----------------------- INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK AX = DE01h BX = 4450h ("DP") CX = 4D49h ("MI") DX = 3039h ("09") Return: AL = FFh if installed BX = 4D42h ("MB") CX = 4921h ("I!") DX = 8F4Fh ES:DI -> filename of DPMI host overlay InstallCheck: test for the existence of the character device QDPMI$$ SeeAlso: INT 2F/AX=1687h,INT 31/AX=0000h Index: installation check;QDPMI --------U-2FDE01BX5242----------------------- INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers AX = DE01h BX = 5242h ("RB") CX:DX = program identifier 656F7000h ("eop",0) for DVeop Return: AX = 5242h ("RB") if installed ES:BX -> data or entry point (see #03100) CX = version number (CH = major, CL = minor) (Table 03100) Call DVeop entry point with: ES:DI -> callback address or 0000h:0000h to remove callback Return: AX = status 0000h failed (callback table full or attempted to remove non- existent callback) 0001h successful ES:DI -> chaining address BX,CX,DX destroyed Notes: the callback function is called with a simulated interrupt when the DESQview window containing it is closed; it should perform all necessary cleanup and then perform a FAR jump to the chaining address or an IRET if the chaining address is 0000h:0000h if the program wishes to remove itself before the window is closed, it should call the DVeop entry point with the previously returned chaining address and ignore the returned chaining address. --------U-2FDE01BX7474----------------------- INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM AX = DE01h BX = 7474h CL = function 00h installation check Return: AL = FFh 01h get process handle DX = keys on Open Window menu (DL = first, DH = second) Return: AX = process handle or 0000h if not running 02h (v1.3+) set TMAN handle DX = TMAN process handle 03h (v1.3+) set open keys to ignore on next CL=01h call DX = keys on Open Window menu (DL = first, DH = second) Return: BX = 4F4Bh ("OK") DL destroyed Note: DVTXDI is distributed as part of the shareware products DVTree (DOS shell/DESQview process manager) and DVTMAN by Mike Weaver Index: installation check;DVTXDI --------U-2FDE01BX7575----------------------- INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM AX = DE01h BX = 7575h CX = function 0000h installation check Return: AX = 00FFh if installed 0001h turn on notification (currently unused) Return: AX = 0001h 0002h turn off notification (currently unused) Return: AX = 0001h 0003h get process information Return: AX = status 0000h failed 0001h successful BX = last instantaneous time slice in 1/100s (v1.10) in 1/18s (v1.11+) CX = number of processes DX = number of "(starting)" records (v2.00+) SI = number of records in process info array (v2.00+) (always 15 for v1.x) ES:DI -> process info array (see #03101,#03102) 0004h get version Return: AH = major version AL = minor version 0005h (v1.10+) get time since DESQview started Return: DX:AX = 1/100s since DV start (v1.10) DX:AX = 1/18s since DV start (v1.11+) 0006h (v1.10+) get number of task switches Return: DX:AX = total task switches CX = task switches in last instantaneous interval Notes: DVSIXDI is part of the DVSI (DESQview System Information) package by Daniel J. Bodoh for v1.00, function 0003h allocates common memory, which the caller must deallocate after reading the process information; only the currently used records are placed in the buffer for v1.10+, function 0003h merely returns a pointer to the internal array of process information; the caller should make a copy of the array while inside a critical section (see INT 15/AX=101Bh). Only those records with bit 7 of the first byte set are valid. Index: installation check;DVSIXDI Format of DVSIXDI v1.00 information for one process: Offset Size Description (Table 03101) 00h BYTE flags bit 7: process slot is valid 01h WORD offset into DESQVIEW.DVO of program's record if started from Open Windows menu, else undefined 03h WORD Switch Windows window number 05h WORD segment of process handle 07h WORD number of tasks owned by process 09h WORD mapping context of process (see #00416 at INT 15/AX=1016h) 0Bh DWORD hook for other programs Format of DVSIXDI v1.10-v2.00 information for one process: Offset Size Description (Table 03102) 00h BYTE process flags (see #03103) 01h WORD Open Window keys 03h WORD Switch Windows number 05h WORD segment of process handle 07h WORD number of tasks for process 09h WORD process mapping context 0Bh DWORD time process started (relative to start of DESQview) 0Fh DWORD time process last got CPU (relative to start of DESQview) 13h DWORD time process last gave up CPU (relative to start of DESQview) 17h DWORD total CPU time since process started 1Bh DWORD CPU time at start of current instantaneous interval 1Fh DWORD CPU time in current instantaneous interval 23h DWORD hook for other programs Note: all times are in 1/100s for v1.10, in 1/18s for v1.11+ Bitfields for DVSIXDI process flags: Bit(s) Description (Table 03103) 7 valid record 6 (v2.00+) record is allocated; if bit 7 clear, process is "(starting)" and only offsets 01h and 09h are valid 5 (v2.00+) this app currently owns the CPU 4 reserved (0) 3 DESQview system task 2 reserved (0) 1 task has keyboard (currently unused) 0 task swapped out (currently unused) --------Q-2FDE01BXFFFE----------------------- INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ??? AX = DE01h BX = FFFEh CX = 4D47h ("MG") DX = 0052h (0,"R") Return: AL = FFh DX = 584Dh --------Q-2FDE02----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - DV INITIALIZATION COMPLETE AX = DE02h BX = mapping context of DESQview DX = handle of DESQview system task Note: driver should pass this call to previous handler after doing its work SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h --------Q-2FDE03----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - DV TERMINATION AX = DE03h BX = mapping context of DESQview DX = handle of DESQview system task Notes: driver should pass this call to previous handler before doing its work DESQview makes this call when it is exiting, but before unhooking any interrupt vectors SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h --------Q-2FDE04----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - ADD PROCESS AX = DE04h BX = mapping context of new process (see #00416 at INT 15/AX=1016h) DX = handle of process Return: nothing Notes: XMS XDI handler (installed by default) allocates a 22-byte record (see #03104) from "common" memory to control access to XMS memory all DOS, BIOS, and DV API calls are valid in handler driver should pass this call to previous handler after processing it SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h Format of XMS XDI structure: Offset Size Description (Table 03104) 00h DWORD pointer to 10-byte record??? 04h DWORD pointer to next XMS XDI structure 08h WORD mapping context 0Ah BYTE ??? 0Bh 5 BYTEs XMS entry point to return for INT 2F/AX=4310h"XMS" (FAR jump to next field) 10h 6 BYTEs FAR handler for XMS driver entry point (consists of a FAR CALL followed by RETF) --------Q-2FDE05----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - REMOVE PROCESS AX = DE05h BX = mapping context of process (see #00416 at INT 15/AX=1016h) DX = handle of last task in process Return: nothing Notes: XMS XDI handler releases the structure allocated by AX=DE04h driver should pass this call to previous handler before processing it all DOS, BIOS, and DV API calls except those generating a task switch are valid in handler SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h --------Q-2FDE06----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - CREATE TASK AX = DE06h BX = mapping context of process containing task DX = handle of new task Notes: driver should pass this call to previous handler after processing it all DOS, BIOS, and DV API calls are valid in handler --------Q-2FDE07----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - TERMINATE TASK AX = DE07h BX = mapping context of process containing task DX = handle of task Notes: driver should pass this call to previous handler before processing it all DOS, BIOS, and DV API calls except those generating a task switch are valid in handler SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h --------Q-2FDE08----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - SAVE STATE AX = DE08h BX = mapping context of task being switched from (see #00416 at INT 15/AX=1016h) DX = handle of task being switched from Notes: invoked prior to task swap, interrupts, etc driver should pass this call to previous handler after processing it SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h --------Q-2FDE09----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - RESTORE STATE AX = DE09h BX = mapping context of task being switched to (see #00416 at INT 15/AX=1016h) DX = handle of task being switched to Notes: state is restored except for interrupts driver should pass this call to previous handler before processing it SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h --------Q-2FDE0A----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - CHANGE KEYBOARD FOCUS AX = DE0Ah BX = mapping context of task receiving focus DX = handle of running task Notes: driver should pass this call to previous handler before processing it this call often occurs inside a keyboard interrupt DV 2.42 does not provide this call to XDI handlers running inside a window; instead, it directly calls the INT 2F handler which was active at the time DV started SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh --------Q-2FDE0B----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - DVP PROCESSING COMPLETE AX = DE0Bh BX = mapping context of DESQview system task CX = number of system memory paragraphs required for the use of all XDI drivers (DV will add this to system memory in DVP buffer) DX = handle of DESQview system task SI = mapping context of new process if it starts ES:DI -> DVP buffer Return: CX incremented as needed Notes: once DV invokes this function, the DVP buffer contents may be changed driver should pass this call to previous handler before processing it --------Q-2FDE0C----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - SWAP OUT PROCESS AX = DE0Ch BX = mapping context of task being swapped out (see #00416 at INT 15/AX=1016h) DX = handle of DESQview system task Note: driver should pass this call to previous handler after processing it --------Q-2FDE0D----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - SWAP IN PROCESS AX = DE0Dh BX = mapping context of process just swapped in (see #00416 at INT 15/AX=1016h) DX = handle of DESQview system task Note: driver should pass this call to previous handler before processing it --------Q-2FDE0E----------------------------- INT 2F C - DESQview v2.26+ External Dev Interface - DVP START FAILED AX = DE0Eh BX = mapping context of DESQview system task DX = handle of DESQview system task SI = mapping context of failed process (same as for call to AX=DE0Bh) Note: driver should pass this call to previous handler after processing it --------Q-2FDE0F----------------------------- INT 2F C - DESQview v2.50+ External Dev Interface - INITIALIZE DV AX = DE0Fh Note: DESQview 2.50+ calls this function just before it completes its initialization. At the time of the call, DESQview has not yet changed any interrupt vectors SeeAlso: AX=DE02h --------Q-2FDE10----------------------------- INT 2F C - DESQview v2.50+ External Dev Interface - FREE TASK AX = DE10h BX = mapping context of process (see #00416 at INT 15/AX=1016h) DX = task handle of process Note: DESQview 2.50+ calls this function before it frees the task; it is similar to AX=DE07h but allows the XDI handler to make calls which cause context switches SeeAlso: AX=DE06h,AX=DE07h --------c-2FDF00----------------------------- INT 2F - HyperWare programs - INSTALLATION CHECK AX = DF00h BX = product code (see #03105) CX = 0000h DX = 0000h Return: AL = status 00h not installed FFh multiplex number in use CX = 5948h ('YH') if selected product installed ---HyperDisk--- BX = code segment of resident portion DX = HyperDisk local data version Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross) Range: AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh SeeAlso: INT 13/AX=8EEDh Index: installation check;HyperDisk|installation check;HyperStb Index: installation check;HyperKey|installation check;HyperScreen Index: HyperDisk;installation check|HyperStb;installation check Index: HyperKey;installation check|HyperScreen;installation check (Table 03105) Values for HyperWare product code: 4248h ('BH') HyperStb 4448h ('DH') HyperDisk v4.20+ 4B48h ('KH') HyperKey 5348h ('SH') HyperScreen --------Q-2FDF00BX5445----------------------- INT 2F U - Quarterdeck TELTSR.COM - INSTALLATION CHECK AX = DF00h BX = 5445h ('TE') CX = 4C54h ('LT') DX = 5352h ('SR') Return: BX = 5454h ('TT') if installed CX = 494Eh ('IN') if installed DX = 5454h ('ST') if installed Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00 which provides an INT 14h interface to the network Range: AH=DEh to AH=FFh and AH=C0h to AH=DDh, selected by scanning SeeAlso: AX=DF01h"TELTSR",AX=DF02h"TELTSR",INT 14/AH=56h --------N-2FDF01BX0000----------------------- INT 2F U - MSG.COM - INSTALLATION CHECK AX = DF01h BX = 0000h Return: AX = FDFFh if installed BX = segment of resident code Program: MSG.COM is a TSR for intercepting incoming Novell broadcast messages written by Gary Dobbins (Dobbins@Arizona.Edu) --------c-2FDF01BX4448----------------------- INT 2F - HyperDisk v4.50+ - GET CURRENT CACHE STATE AX = DF01h BX = 4448h ('DH') Return: AX = 0000h if function supported BX = number of cache buffers in use CX = number of cache buffers which have been modified DL = caching flags (see #03106) Range: AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh SeeAlso: AX=DF00h,AX=DF02h Bitfields for HyperDisk caching flags: Bit(s) Description (Table 03106) 0 staged writes enabled for floppy disks 1 staged writes enabled for hard disks 2 writes verified on floppy disks 3 writes verified on hard disks 4 reserved (0) 5 reserved (0) 6 floppy caching enabled 7 all caching functions enabled --------Q-2FDF01----------------------------- INT 2F U - Quarterdeck TELTSR.COM - CLOSE CONNECTION AX = DF01h Return: nothing??? Note: invokes the DESQview/X socket API (see INT 15/AX=DE2Eh) function 0006h to close the socket corresponding to the file handle set with AX=DF02h; NOP if no file handle was ever set SeeAlso: AX=DF00h"TELTSR",AX=DF02h"TELTSR" --------c-2FDF02BX4448----------------------- INT 2F - HyperDisk v4.50+ - SET CACHE STATE AX = DF02h BX = 4448h ('DH') DL = new caching flags (see #03106) Return: AX = 0000h if supported BX = number of cache buffers in use CX = number of cache buffers which have been modified DL = previous caching flags (see #03106) Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross) Range: AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh SeeAlso: AX=DF00h,AX=DF01h --------Q-2FDF02----------------------------- INT 2F U - Quarterdeck TELTSR.COM - OPEN CONNECTION AX = DF02h BX = file handle for connection's socket Return: AX = status 0000h successful FFFFh no more room in TELTSR's JFT Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00 Notes: the indicated file handle becomes owned by TELTSR, and is closed in the caller's JFT multiple calls to this function will override the previous assignment without closing the previous file; use AX=DF01h before further calls SeeAlso: AX=DF00h"TELTSR",AX=DF01h"TELTSR" --------U-2FE000----------------------------- INT 2F - SETDRVER.COM v2.10+ - INSTALLATION CHECK AX = E000h Return: AX = 4A52h ("JR") if present Program: SETDRVER is a public domain TSR by Jacob Rieper which sets the apparent DOS version analogously to MS-DOS SETVER Notes: this installation check differs from the usual one of returning AL=FFh the SETDRVER API is fully emulated by Matthias Paul's FREEVER SeeAlso: AX=E000h/DX=4D50h,AX=E001h,INT 21/AH=52h --------j-2FE000----------------------------- INT 2F - KAOSHIDE - INSTALLATION CHECK AX = E000h Return: AL = FFh if installed Program: KAOSHIDE ('Hidden Kaos') is a PD joke TSR which randomly capitalizes alphabetic keys, written by Philip Maland. Although not a virus, v2.0 uses some viral-like techniques to hide itself from memory-reports by reducing DOS memory size. --------U-2FE000DX4D50----------------------- INT 2F - FREEVER v1.0+ - INSTALLATION CHECK AX = E000h DX = 4D50h ('MP') Return: AL = FFh if installed AH = AMIS INT 2Dh multiplex ID CX = FREEVER version (CH=major, CL=minor) DX:DI -> AMIS-compliant signature (see #02569) (vendor ID is "M. Paul ", program name is "FREEVER ") Program: FREEVER is an AMIS-conformant freeware DOS version-faking TSR similar to SETVER for any DOS-compatible OS, written by Matthias Paul Note: FREEVER emulates INT 21/AH=30h, INT 21/AX=3306h, INT 21/AX=4412h, INT 21/AX=4452h, and SETDRVER's API on INT 2F/AX=E00xh, as well as providing an AMIS API on INT 2Dh SeeAlso: AX=E000h"SETDRVER",INT 21/AH=30h,INT 21/AX=3306h,INT 21/AX=4452h --------K-2FE000DX5354----------------------- INT 2F - StuffIt v3.21+ - INSTALLATION CHECK AX = E000h DX = 5354h ("ST") Return: AL = FFh if installed BX = version (BH = major, BL = BCD minor) DX = segment of resident code Program: StuffIt is a freeware delayed keyboard stuffer by Terje Mathisen --------U-2FE001----------------------------- INT 2F - SETDRVER.COM v2.10+ - GET SETDRVER VERSION AX = E001h Return: AH = major version AL = minor version Note: the SETDRVER API is fully emulated by Matthias Paul's FREEVER, which returns version 2.10 for this call; use AX=E000h/DX=45D0h to get FREEVER's version number SeeAlso: AX=E000h,AX=E000h/DX=45D0h --------U-2FE002----------------------------- INT 2F - SETDRVER.COM v2.10+ - GET ORIGINAL DOS VERSION INFO AX = E002h Return: AL = FFh if successful BH = major DOS version BL = minor DOS version CH = DOS version flag CL = OEM number DH = major DR DOS version number (FFh if unknown) DL = minor DR DOS version number (FFh if unknown) SeeAlso: AX=E003h,AX=E007h,INT 21/AH=30h --------U-2FE003----------------------------- INT 2F - SETDRVER.COM v2.10+ - RESET INTERNAL VARIABLES AX = E003h BH = new major DOS version BL = new minor DOS version CH = new DOS version flag CL = new DOS revision number DH = new OEM number SeeAlso: AX=E002h --------U-2FE004----------------------------- INT 2F - SETDRVER.COM v2.10+ - ENABLE TSR AX = E004h Return: AL = FFh if successful SeeAlso: AX=E000h,AX=E005h,AX=E006h --------U-2FE005----------------------------- INT 2F - SETDRVER.COM v2.10+ - DISABLE TSR AX = E005h Return: AL = FFh if successful SeeAlso: AX=E000h,AX=E004h,AX=E006h --------U-2FE006----------------------------- INT 2F - SETDRVER.COM v2.10+ - GET TSR STATUS AX = E006h Return: AL = FFh if successful BL = status 01h resident and active 02h resident and inactive --------U-2FE007----------------------------- INT 2F - SETDRVER.COM v2.10+ - GET TaskMAX STATUS AT INSTALLATION AX = E007h Return: AL = FFh if successful BL = status 00h if TaskMAX not loaded before SETDRVER FFh if TaskMAX was loaded before SETDRVER SeeAlso: AX=E003h --------U-2FE0------------------------------- INT 2F - SETDRVER.COM - RESERVED FOR FUTURE USE AH = E0h AL = 08h-10h --------K-2FE100----------------------------- INT 2F - Phantom2 v1.1+ - INSTALLATION CHECK AX = E100h Return: AX = 0001h if installed DS:SI -> ASCIZ hotkey name DS:DI -> ASCIZ recording filename Program: Phantom of the Keyboard II is a shareware keystroke recorder/replayer by P2 Enterprises SeeAlso: AX=E101h,AX=E102h,AX=E103h,AX=E300h Index: hotkeys;Phantom2 --------K-2FE101----------------------------- INT 2F - Phantom2 v1.1+ - FUNCTION REQUEST AX = E101h BX = function mask (see #03107) CX = code for hotkey (as returned by INT 16/AH=00h) if BX bit 6 set DS:DX -> ASCIZ filespec if BX bit 7 set SeeAlso: AX=E100h Index: hotkeys;Phantom2 Bitfields for Phantom2 function mask: Bit(s) Description (Table 03107) 0 record 1 play 2 QuickPlay 3 loop 4 mode display toggle 5 sound toggle 6 set hotkey 7 set filespec --------K-2FE102----------------------------- INT 2F - Phantom2 v1.1+ - UNINSTALL AX = E102h Return: AX = status 0001h removal successful 0002h not installed as TSR FFFFh disabled but not removed SeeAlso: AX=E100h --------K-2FE103----------------------------- INT 2F - Phantom2 v2.8 - SET ??? FLAG AX = E103h Return: AX = 0001h SeeAlso: AX=E100h --------y-2FE200----------------------------- INT 2F - SecureDevice - LOGIN TO DRIVE AX = E200h DL = drive number (0 = A:) DS:SI -> 104-byte key Return: AL = status 00h unable to determine key's validity 01h key is valid FFh key is invalid Program: SecureDevice is a copylefted device driver by Max Loewenthal and Arthur Helwig which turns one or more disk files into encrypted logical drives SeeAlso: AX=E201h,AX=E203h,AX=E209h --------y-2FE201----------------------------- INT 2F - SecureDevice - GET INFORMATION AX = E201h DX = driver index (0000h = first loaded) Return: AL = number of volumes handled by driver DL = drive number of first volume (00h = A:) SeeAlso: AX=E200h,AX=E203h,AX=E209h --------y-2FE203----------------------------- INT 2F - SecureDevice - DESTROY PASSWORD (LOGOUT FROM DRIVE) AX = E203h DL = drive number (00h = A:) or FFh for all drives Return: nothing SeeAlso: AX=E200h,AX=E209h --------y-2FE209DX0000----------------------- INT 2F - SecureDevice - INSTALLATION CHECK AX = E209h DX = 0000h Return: AX = 1DEAh if installed DX = number of drivers installed --------K-2FE300----------------------------- INT 2F - ANARKEY.COM - INSTALLATION CHECK AX = E300h Return: AL = state 00h not installed FEh if installed but suspended (v3.0+) FFh installed Program: ANARKEY.COM is a commandline recall program by Steven Calwas Range: AH=C0h to AH=FFh, selected by commandline switch SeeAlso: AX=E100h,AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h SeeAlso: AX=E307h,INT 66"Newkey" --------V-2FE300----------------------------- INT 2F - Blank - INSTALLATION CHECK AX = E300h Return: AL = FFh if installed ES = resident code segment Program: Blank is a shareware screen blanker by Yonah Schmeidler Note: AH=E3h is the default, which may be reconfigured by the installation program in the registered version SeeAlso: AH=93h,AX=C050h,INT 14/AX=AA01h Index: screen saver;Blank --------K-2FE301----------------------------- INT 2F U - ANARKEY.COM v2+ - GET ??? AX = E301h Return: DX:BX -> ??? (see #03108,#03109) SeeAlso: AX=E300h Format of returned data structure for ANARKEY v2.0: Offset Size Description (Table 03108) -7 7 BYTEs signature ('ANARKEY') 00h WORD ??? (I see 0001h in v2.0) 02h WORD ??? (I see 0001h in v2.0) 04h WORD ??? (I see 0 in v2.0) 06h WORD PSP segment of next program loaded Format of returned data structure for ANARKEY v3+: Offset Size Description (Table 03109) -1 BYTE multiplex number 00h WORD ??? (I see 0001h in v3.0-4.0) 02h WORD ??? (I see 0001h in v3.0-4.0) 04h BYTE ??? (I see 0 in v3.0-4.0) 05h WORD PSP segment of next program loaded --------K-2FE302----------------------------- INT 2F U - ANARKEY.COM v3+ - ??? AX = E302h BL = ??? Return: ??? SeeAlso: AX=E300h --------K-2FE303----------------------------- INT 2F U - ANARKEY.COM v3+ - ANARKMD API AX = E303h BL = function 01h toggle insert mode 02h display contents of history buffer 03h write history buffer to file ES:DX -> file name 04h clear history buffer 05h undefine all aliases 06h show aliases 07h list programs using Unix switchar 08h jump to bottom of history buffer 09h (v4.0) add string to history buffer ES:DX -> ASCIZ string 0Ah (v4.0) ??? ES:DX -> ??? 0Bh (v4.0) copy string to edit buffer for use as next input line ES:DX -> ASCIZ string 0Ch (v4.0) ??? 0Dh (v4.0) copy ??? to ??? 0Eh (v4.0) ??? 0Fh (v4.0) ??? 10h (v4.0) set ??? flag 11h (v4.0) display error message about running in EMS under Windows Return: ??? SeeAlso: AX=E300h --------K-2FE304----------------------------- INT 2F U - ANARKEY.COM v2+ - ??? AX = E304h BL = ??? Return: ??? SeeAlso: AX=E300h --------K-2FE305----------------------------- INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY AX = E305h BL = new state 01h suspended 00h enabled SeeAlso: AX=E300h --------K-2FE306----------------------------- INT 2F U - ANARKEY.COM v4.0 - GET ??? AX = E306h Return: AX = ??? SeeAlso: AX=E300h --------K-2FE307----------------------------- INT 2F U - ANARKEY.COM v4.0 - GET ??? AX = E307h Return: AX = ??? BL = ??? SeeAlso: AX=E300h --------K-2FE337----------------------------- INT 2F - INT16.COM - INSTALLATION CHECK AX = E337h Return: AX = 0013h if installed Program: INT16.COM is an INT16 keyboard BIOS replacement for INT 16/AH=00h-02h,10h-12h (based on K3) written by Martin Gerdes and published in c't 05/1990. SeeAlso: AX=ED58h --------l-2FE44D----------------------------- INT 2F - NDOS - API AX = E44Dh Program: NDOS is a version of 4DOS licensed to Symantec for inclusion in the Norton Utilities Note: as NDOS is a licensed version of 4DOS v3.03, the API is identical to that for 4DOS, except that AH=E4h instead of D4h and the installation check returns AX=44EEh instead of AX=44DDh SeeAlso: AX=D44Dh,AX=E44Eh --------l-2FE44E----------------------------- INT 2F C - NDOS - AWAITING USER INPUT AX = E44Eh BX = condition 0000h NDOS is ready to display prompt 0001h NDOS has displayed the prompt, about to accept user input Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS SeeAlso: AX=E44Dh --------K-2FE44FBX0000----------------------- INT 2F - NDOS v4.0+ - KSTACK.COM - INSTALLATION CHECK AX = E44Fh BX = 0000h Return: AX = 44EEh if installed Program: NDOS is a version of 4DOS licensed to Symantec for inclusion in the Norton Utilities Note: this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+, which emulate the 4DOS and NDOS keystack SeeAlso: AX=D44Fh/BX=0000h,AX=E44Fh/BX=0001h --------K-2FE44FBX0001----------------------- INT 2F - NDOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK AX = E44Fh BX = 0001h CX = number of keystrokes (01h-FFh) DS:DX -> keystroke list (one word per keystroke) Return: AX = status 0000h successful nonzero failed BX,CX,DX destroyed Notes: the keystrokes are the exact values to return from subsequent calls to INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions: 0000h causes subfunctions 01h and 11h to indicate an empty keyboard buffer FFFFh is followed by a word indicating the number of clock ticks to delay before the next faked keystroke v4.00 KSTACK overwrites any unread keystrokes from the previous invocation, and does not range-check CX; it will overwrite memory following the resident portion if CX is greater than 100h. this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+, which emulate the 4DOS and NDOS keystack SeeAlso: AX=E44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h"DOS" --------U-2FE600CL30------------------------- INT 2F - Virtual 486 - INSTALLATION CHECK AX = E600h CL = 30h BX = C0DEh Return: BX = DEC0h if installed Program: Virtual 486 is a 80486 CPU emulator for an 80386 by Solar Designer ----------2FE700BX4158----------------------- INT 2F - Multiplex - ??? - INSTALLATION CHECK??? AX = E700h BX = 4158h ("AX") CX = 4953h ("IS") DX = 4845h ("HE") Return: AL = FFh if installed BX = 4C4Fh ("LO") if ??? installed CX = 4F4Bh ("OK") DX = 4F55h ("OU") ES:DI -> ??? Range: AH=C0h to AH=FFh, selected by scanning AH=E7-FFh, then AH=C0h-E6h Note: called by QDPMI when its Real to Protected Mode Switch Entry Point is called --------f-2FE77EBX0000----------------------- INT 2F - CTDEMN - INSTALLATION CHECK AX = E77Eh BX = 0000h CX = 4F4Dh ('OM') DX = 5453h ('TS') Return: AX = 7EE7h if installed BX = resident code segment CX = 6F6Dh ('om') DX = 7473h ('ts') Program: CTDEMN is a file daemon TSR by Simultan AG --------E-2FED00----------------------------- INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK AX = ED00h BL = DOS extender ID (see #03110) Return: AL = status 00h not installed FFh installed SI = 5048h ("PH") DI = 4152h ("AR") CH = major version number CL = minor version number DX = flags bit 0: running under DPMI bit 1: running under Phar Lap VMM if running under DPMI: BX = DPMI version (BH = major, BL = minor) SeeAlso: AH=A1h,AX=F100h,AX=FBA1h (Table 03110) Values for Phar Lap DOS extender ID: 01h 286dosx v1.3+ (Software Development Kit) 02h 286dosx v1.3+ (Run-Time Kit) 03h 386dosx v4.0+ (SDK) 04h 386dosx v4.0+ (RTK) --------E-2FED03----------------------------- INT 2F R - Phar Lap 386/DOS-Extender v4.1 - GET EXTENDER ENTRY POINT AX = ED03h CX = real-mode code segment DX = real-mode data segment Return: CF clear if successful CX = protected-mode code segment selector DX = protected-mode data segment selector ES:DI -> real-mode entry point for calling protected-mode functions (see INT 21/AX=250Dh) CF set on error AX = error code 0008h unable to allocate LDT descriptors --------E-2FED10BL05------------------------- INT 2F - Pharlap DOS Extender - ??? AX = ED10h BL = 05h ES:SI -> ??? structure Return: AX = ??? SI = ??? DI = ??? SeeAlso: AX=ED00h,AX=ED11h --------E-2FED11BL05------------------------- INT 2F - Pharlap DOS Extender - FATAL EXIT TO REAL MODE ??? AX = ED11h BL = 05h CX = ??? DX = ??? ES:SI -> ??? structure SS:SP = new stack ??? Return: ??? Note: called immediately prior to terminating program with INT 21/AX=4CFFh SeeAlso: AX=ED00h,AX=ED10h --------K-2FED58----------------------------- INT 2F U - K5.COM - INSTALLATION CHECK AX = ED58h Return: AX = 000Dh if installed ES = resident code segment BX = ??? (9999h) ??? Program: K5 is an extended keyboard driver by Martin Gerdes, based on his K3 SeeAlso: AX=E337h,INT 16/AX=AF20h --------E-2FED80----------------------------- INT 2F - Phar Lap 286|DOS Extender Lite v2.5 - ??? AX = ED80h BL = DOS extender ID (see #03110) SI = 5048h ("PH") DI = 4152h ("AR") ??? Return: ??? --------O-2FEDC8BX0000----------------------- INT 2F - Novell DOS 7+ - SECURITY.BIN - INSTALLATION CHECK AX = EDC8h ('EDC' = Novell European Development Centre) BX = 0000h CX = 0000h DX = 1234h Return: ??? Note: called by Novell DOS 7 LOCK command during installation (Table 04107) Call Novell DOS SECURITY.BIN API with: AX??? = function 0000h get status 0001h authenticate password hash 0002h get / change encrypted master key password??? 0003h ??? Set encrypted master key password 0004h ??? Get logged-in user ID 0005h ??? Set logged-in user ID 0006h Get device restriction mask 0007h Set device restriction mask 0008h Disable PNW DB access 0009h Enable PNW DB access 000Ah Get user name 000Bh Set user name 000Ch Change user password hash 000Dh Get last function 000Eh Get Encoded ASCII password 000Fh Set Encoded ASCII password 0010h Get user seed 0011h Set user seed !!! more info to follow --------y-2FEE00----------------------------- INT 2F - GRIDLOC.EXE - INSTALLATION CHECK AX = EE00h Return: AL = FFh if installed Program: GRIDLOC is a PC security program by Intelligent Security Systems, Inc. SeeAlso: INT 21/AH=40h"NB.SYS" --------U-2FEE00----------------------------- INT 2F - XVIEW - INSTALLATION CHECK AX = EE00h Return: AX = 00FFh if installed Program: XVIEW is a hypertext viewer by Flambeaux Software, Inc. --------N-2FEE00----------------------------- INT 2F - WEB v4.02 - INSTALLATION CHECK AX = EE00h Return: AL = status 00h not installed FFh installed Program: WEB is an IPX-based peer-to-peer network by Webcorp. SeeAlso: AH=EEh"WEB",AX=EEF0h --------U-2FEE01----------------------------- INT 2F - XVIEW - POP UP GIVING TOPIC SEARCH KEYWORD AX = EE01h DS:DX -> ASCIZ string containing case-insensitive keyword to look up Return: AX = status (see #03111) Note: the specified keyword should be a hyperlink in the _IndexPage of some database; the current database is searched first SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE03h,AX=EE04h,AX=EE06h (Table 03111) Values for XVIEW function status: 0000h successful 00F1h unknown subfunction 00F2h unable to pop up --------U-2FEE02----------------------------- INT 2F - XVIEW - POP UP GIVING A PAGE NUMBER AX = EE02h DX = physical page number or anchor page number (see #03112) Return: AX = status (see #03111) Note: physical page numbers are assigned by the hypertext compiler, and will change if a page is inserted in the middle SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE05h,AX=EE06h (Table 03112) Values for XVIEW anchor page number: FFEAh _Credits FFECh _SearchTopics FFEDh _SearchText FFF0h _ManualList FFF5h _HelpOnHelp FFF8h _HomePage FFF9h _IndexPage --------U-2FEE03----------------------------- INT 2F - XVIEW - POP UP GIVING FILENAME AND SEARCH TOPIC OR PAGE NUMBER AX = EE03h DS:DX -> data packet (see #03113) Return: AX = status (see #03111) SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE06h Format of XVIEW data packet: Offset Size Description (Table 03113) 00h DWORD -> ASCIZ database filespec (0000h:0000h for current database) 04h DWORD -> ASCIZ text to look up or 0000h:0000h 08h WORD page number (0000h if keyword used) 0Ah 6 BYTEs reserved --------U-2FEE04----------------------------- INT 2F - XVIEW - POP UP AND READ SCREEN FOR SEARCH TOPIC KEYWORD AX = EE04h Return: AX = status (see #03111) Note: equivalent to the action taken when the user presses the Alt-L hotkey SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE03h,AX=EE06h --------U-2FEE05----------------------------- INT 2F - XVIEW - POP UP TO MOST-RECENTLY VIEWED PAGE AX = EE05h Return: AX = status (see #03111) Note: equivalent to the action taken when the user presses the Alt-H hotkey SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE06h --------U-2FEE06----------------------------- INT 2F - XVIEW - WAIT FOR POP-DOWN AND GET EXIT CODE AX = EE06h Return: AX = status (see also AX=EE01h) 0001h specified filename is not an xText database 0002h no databases found 0003h bad data in file 0004h memory shortage 0005h unable to open the requested file 0007h invalid page number for file Note: although this call is not required, the exit code can alert the caller to problems; if the call is not made, the program should enforce a delay of about 1/2 second to allow the viewer to pop up, and should not get keyboard input or attempt disk accesses during the delay SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE03h,AX=EE04h,AX=EE05h --------N-2FEE------------------------------- INT 2F - WEB v4.02 - WEB MODULE INSTALLATION CHECK AH = EEh AL = module ID (see #03114) Return: AX = 0000h if installed ES:DI -> far entry point for module-specific API calls (see #03115,#03116,#03117,#03118,#03119) Program: WEB is an IPX-based peer-to-peer network by Webcorp. SeeAlso: AX=EE00h"WEB" (Table 03114) Values for WEB module ID: 10h server module (SERVER.EXE) 20h client module (CLIENT.EXE) 30h mail module (MAIL.EXE) 40h spooler (PCSPOOL.EXE) 50h kernel module (KERNEL.EXE) 60h SAP module (KERNEL.EXE) 70h resident station manager (SM.EXE) 90h router module (ROUTER.EXE) (Table 03115) Call server module entry point with: BX = function 0000h remove server module Return: AX = status (0000h if successful, else WEB error code) 0001h create SYSINFO file Note: the SYSINFO file is used by the station manager when displaying info for a particular station 0002h get server object table Return: CX = number of server objects ES:DI -> server object table Note: server objects include drives and devices that the server module controls 0003h get server variables Return: ES:DI -> server variables (Table 03116) Call client module entry point with: BX = function 0000h remove client module Return: AX = status (0000h if successful, else WEB error code) 0001h decrement client-only flag 0002h increment client-only flag 0005h set device capture Note: decrements DeviceOutput flag, telling the spooler that it may trap device output again 0006h clear device capture Note: increments DeviceOutput flag, telling the spooler that it should not trap device output (this is used internally by the spooler to prevent it from trapping its own output) 0007h get client debug pointer Return: ES:DI -> client debug data structure (see #03120) 0008h get root drive Return: AL = WEB startup drive 0009h get maximum possible drive/device redirections Return: AL = maximum drive redirections CH = maximum LPTx redirections CL = maximum COMx redirections 000Ah suspend client Return: AX = previous value of Suspend flag 000Bh resume client Return: AX = previous value of Suspend flag 000Ch get instance data CX = maximum number of structures in array ES:DI -> buffer for array of WIN_INSTANCE_DATA structures (see #03121) Return: CX = number of structures actually returned Note: used internally by WEB4WIN (Table 03117) Call mail module entry point with: BX = function 0000h remove mail module Return: AX = status (0000h successful, else WEB error code) 0001h set mail poll Note: schedules the WEB mail module 0002h set mail notify Note: sets the Notify flag, which determines whether the user will be notified when mail is received 0003h clear mail notify Note: clears the Notify flag, which determines whether the user will be notified when mail is received 0004h check whether new mail has arrived Return: AL = new mail status 00h no new mail since last call else new mail has arrived Note: also clears the new-mail flag after retrieving it 0005h send notify ES:DI -> name of WEB user to be notified 0006h get post office Return: ES:DI -> full network path of Post Office subdirectory (Table 03118) Call spooler entry point with: BX = function 0000h remove PCSpool module Return: AX = status (0000h successful, else WEB error code) 0001h set spooler poll Note: schedules the WEB spooler 0002h check spooler changed Return: AX = 0000h Note: this call is a NOP in current versions of WEB (Table 03119) Call kernel entry point with: BX = function 0000h remove kernel module Return: AX = status (0000h successful, else WEB error code) 0001h set kernel ^S filter DL = new state (00h don't filter ^S, nonzero do filter) 0002h get kernel data area Return: ES:DI -> kernel data area 0003h display dialog box CL = dialog box type 00h password 01h E-Note received notification 02h Novell login 03h general notification DL = number of rows to display ES:SI -> array of far pointers to rows to be displayed ES:DI -> Pascal-style input buffer Return: AX = status (0000h successful, else error code) 0004h kernel service events 0005h get kernel's in-critical-section flag Return: ES:DI -> kernel InCriticalSection flag 0006h schedule DOS event AL = directive 00h do not ignore WEB ExtraBusy flag 01h ignore ExtraBusy flag 02h (WEB4WIN) check that current Windows VM is foregrnd VM ES:SI -> WEB AES Event Control Block (ECB) (see #03122) Notes: the WEB Asynchronous Event Scheduler is similar to the one used by IPX; this call schedules a special ECB to be executed at a later time. Unlike IPX ECBs, the timeout must be set explicitly by the caller this function also calls function 0004h 0007h check busy AL = directive 00h do not ignore WEB ExtraBusy flag 01h ignore ExtraBusy flag 02h (WEB4WIN) check that current Windows VM is foregrnd VM Return: AX = status (0000h not busy, else busy) 0008h set keyboard intercept Note: currently a NOP which returns immediately 0009h get keyboard intercept Note: currently a NOP which returns immediately 000Ah get dialog flags Return: ES:DI -> kernel dialog flags (see #03123) 000Bh get network path Return: ES:DI -> fully-qualified network path of file where the screen is stored on Dialog calls 000Ch kernel alternate dialog CL = dialog box type 00h password 01h E-Note received notification 02h Novell login 03h general notification DL = number of rows to display ES:SI -> array of far pointers to rows to be displayed ES:DI -> Pascal-style input buffer Return: AX = status (0000h successful, else error code) Note: this function is identical to function 0003h except that it does not notify WEB4WIN of the impending dialog request 000Dh get machine/operating system type Return: AX = machine/operating system type 01h IBM PC, MS-DOS 02h IBM PC, DOSV (Japanese) 03h NEC PC-9800, JDOS (Japanese) 04h IBM PC, Korean DBC DOS Format of client debug data structure: Offset Size Description (Table 03120) 00h WORD total files 02h WORD files free 04h WORD no files 06h WORD minimum files 08h WORD total FCBs 0Ah WORD total safe FCBs 0Ch WORD FCBs in use 0Eh WORD wrong FCB 10h WORD compressed 12h WORD retransmits Format of WIN_INSTANCE_DATA structure: Offset Size Description (Table 03121) 00h DWORD real-mode pointer to data to be instanced 04h WORD size of data to be instanced Format of WEB AES Event Control Block: Offset Size Description (Table 03122) 00h DWORD link address 04h WORD ESR address 08h BYTE InUse flag 09h BYTE completion code 0Ah 3 BYTEs reserved 0Dh WORD timeout 0Fh BYTE IgnoreExtra flag 10h WORD PSP 12h DWORD DTA 16h WORD AX value for DOS critical information 18h WORD BX value for DOS critical information 1Ah WORD CX value for DOS critical information 1Ch WORD DX value for DOS critical information (Table 03123) Values for kernel dialog flags: 01h dialog will timeout 02h display stars instead of entered keystrokes --------N-2FEEF0----------------------------- INT 2F - WEB v4.02 - WEB GENERAL NOTIFICATION AX = EEF0h BX = notification function ID (see #03124) Return: varies by notification function Program: WEB is an IPX-based peer-to-peer network by Webcorp. Note: the notification functions are used internally by WEB modules to notify other modules and external programs of actions or event, and should never be called by an application SeeAlso: AX=EE00h"WEB" (Table 03124) Values for WEB Notification Function ID: 00h node added 01h node deleted 02h dial attempt 03h dial failed 04h file close 05h close connection 07h check Windows mode 20h link up 21h link down --------K-2FF000----------------------------- INT 2F U - 4MAP - INSTALLATION CHECK AX = F000h Return: AX = 00FFh Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng Note: returns AX=00FFh for any value of AL not listed here SeeAlso: AX=D44Dh,AX=F001h,AX=F002h --------K-2FF001----------------------------- INT 2F U - 4MAP - GET KEY MAPPINGS AX = F001h Return: ES:BX -> key mappings SeeAlso: AX=F000h --------K-2FF002----------------------------- INT 2F U - 4MAP - INSERT CHARACTER INTO ??? AX = F002h BL = character to insert Return: AX = status 0000h successful 0001h buffer full SeeAlso: AX=F000h,AX=F003h --------K-2FF003----------------------------- INT 2F U - 4MAP - INSERT CHARACTER INTO ??? AX = F003h BL = character to insert Return: AX = status 0000h successful 0001h buffer full Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng SeeAlso: AX=F000h,AX=F002h --------m-2FF1------------------------------- INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK AH = F1h AL <> F1h Return: AL = F1h if installed Program: MIN-MEM is a shareware TSR manager by Biologic which permits up to 24 popup TSRs to be loaded but swapped out to disk, EMS, or XMS. One TSR at a time is brought back into memory at the user's request. --------E-2FF100----------------------------- INT 2F - DOS EXTENDER INSTALLATION CHECK AX = F100h Return: AL = FFh if DOS extender present SI = 444Fh ("DO") DI = 5358h ("SX") Note: supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h --------T-2FF1------------------------------- INT 2F U - RTKernel v4.0 - INSTALLATION CHECK AH = F1h AL = 00h Return: AX = FFFFh if present CX = 00F1h Program: RTKernel is a DOS preemptive multitasking library for C/Pascal by On Time Informatik GmbH --------W-2FF200----------------------------- INT 2F - WINX - INSTALLATION CHECK AX = F200h Return: AX = 00FFh if installed Program: WINX is a DOS/Windows utilities by Al Williams which can be used to launch Windows applications from a DOS Box; it was published in "DOS and Windows Protected Mode-Programming with DOS Extenders" (Addison-Wesley) and should not be confused with the Windows driver of the same name which is part of the DESQview/X package --------W-2FF201----------------------------- INT 2F - WINX - RETURN ADDRESS OF SERVER BUFFER AX = F201h Return: AX = status FFFFh if WINX is busy processing a different request 0000h if successful BX:CX = address of server buffer (see #03125) Format of WINX server buffer: Offset Size Description (Table 03125) 00h BYTE command/status 00h buffer available 01h buffer contains result 02h change directory 03h execute program FFh terminate windows portion of WINX 01h ? BYTEs command (03h) or directory (02h) or 01h DWORD result (01h) --------W-2FF202----------------------------- INT 2F - WINX - SET SERVER'S WORKING DIRECTORY AX = F202h BX:CX -> directory Return: AX = status FFFFh if WINX is busy processing a different request 0000h if successful SeeAlso: AX=F200h,AX=F203h --------W-2FF203----------------------------- INT 2F - WINX - EXECUTE COMMAND AX = F203h BX:CX -> command Return: AX = status 0000h if successful FFFFh if WINX is busy processing a different request SeeAlso: AX=F200h,AX=F202h --------G-2FF400----------------------------- INT 2F - FINDIRQ.COM - INSTALLATION CHECK AX = F400h Return: AL = 01h if installed Program: FINDIRQ is a program by Rick Knoblaugh published in the 9/28/93 issue of PC Magazine; when run as a TSR it can determine which IRQs are used only when a device is active SeeAlso: AX=F401h --------N-2FF400----------------------------- INT 2F - PowerLAN - INSTALLATION CHECK??? AX = F400h ??? Return: ??? Note: this function is called by PowerLAN's NET.EXE just prior to calling AX=F401h (get version) SeeAlso: AX=F401h"PowerLAN" --------N-2FF401----------------------------- INT 2F - PowerLAN - GET VERSION AX = F401h Return: ES:BX -> WORD containing 100*version (in decimal) Program: PowerLAN is a networking product by Performance Technology SeeAlso: AX=F400h"PowerLAN",AX=F483h"PowerLAN" --------G-2FF401CX5121----------------------- INT 2F - FINDIRQ.COM - GET HOOKED INTERRUPTS AX = F401h CX = 5121h ('Q!') Return: AX:DX -> hooked interrupt table (see #03126) SeeAlso: AX=F400h Format of FINDIRQ hooked interrupt table: Offset Size Description (Table 03126) 00h BYTE 1Ch 01h DWORD FINDIRQ's INT 1C handler 05h DWORD original INT 1C handler 09h BYTE 28h 0Ah DWORD FINDIRQ's INT 28 handler 0Eh DWORD original INT 28 handler 12h BYTE 2Fh 13h DWORD FINDIRQ's INT 2F handler 17h DWORD original INT 2F handler --------N-2FF483----------------------------- INT 2F - PowerLAN - ??? AX = F483h ??? Return: ??? SeeAlso: AX=F400h"PowerLAN",AX=F401h"PowerLAN" --------d-2FF700----------------------------- INT 2F - AUTOPARK.COM - INSTALLATION CHECK AX = F700h Return: AL = state 00h not installed FFh installed Program: AUTOPARK.COM is a resident hard disk parker by Alan D. Jones --------d-2FF701----------------------------- INT 2F - AUTOPARK.COM - SET PARKING DELAY AX = F701h BX:CX = 32-bit count of 55ms timer ticks --------d-2FF800CX4455----------------------- INT 2F U - SuperStor PRO 2XON.COM - INSTALLATION CHECK AX = F800h CX = 4455h ("DU") DL = 45h ("E") Return: AL = FFh if installed ES:BX -> ASCII signature "Universal Data Exchange" Program: SuperStor is a disk-compression program by Addstor. Note: returns AX=0001h if AL is not 00h or 01h SeeAlso: AX=1001h,AX=F801h --------d-2FF801CX4455----------------------- INT 2F U - SuperStor PRO 2XON.COM - UNINSTALL AX = F801h CX = 4455h ("DU") DL = 45h ("E") ES:BX = return address if successful Return: at specified address if successfully removed from memory else AL = error code ??? Program: SuperStor is a disk-compression program by Addstor. Note: returns AX=0001h if AL is not 00h or 01h SeeAlso: AX=1001h,AX=F800h ----------2FFA00----------------------------- INT 2F - Multiplex - ??? - INSTALLATION CHECK??? AX = FA00h BX = ??? (0408h) CX = ??? (001Fh) DX = ??? (0102h) SI = ??? (5ACCh) DI = ??? (0632h) Return: ??? Note: called by WinEmacs at startup ----------2FFA00----------------------------- INT 2F - Multiplex - ??? - INSTALLATION CHECK??? AX = FA00h BX = ??? (03FCh) CX = ??? (003Fh) DX = ??? (00FFh) SI = ??? (5AA6h) DI = ??? (0620h) Return: ??? Note: called by Matlab at startup --------*-2FFB------------------------------- INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL AH = FBh SeeAlso: AX=FB42h/BX=0001h --------f-2FFB------------------------------- INT 2F U - Conner Backup Exec AUTORES - API AH = FBh BL = function number (00h-07h) ??? Return: ??? Program: AUTORES is a resident program launcher for unattended backups --------a-2FFB00----------------------------- INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK AX = FB00h Return: AX = 00FFh if installed Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. SeeAlso: INT 10/AX=3800h,INT 14/AX=F0F1h --------U-2FFB00----------------------------- INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK AX = FB00h Return: AX = FFFFh if installed BX = version (BCD, BH=major, BL=minor) SeeAlso: AX=FB03h"Jot-It",AX=FB01h"Jot-It" --------a-2FFB01----------------------------- INT 2F U - AutoBraille v1.1A - ??? AX = FB01h ??? Return: ??? --------U-2FFB01----------------------------- INT 2F U - Jot-It! v1.50 - GET USER NAME AX = FB01h Return: DX:BX -> ASCIZ user name SeeAlso: AX=FB02h"Jot-It" --------a-2FFB02----------------------------- INT 2F U - AutoBraille v1.1A - ??? AX = FB02h Return: AH = ??? AL = ??? --------U-2FFB02----------------------------- INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY AX = FB02h Return: DX:BX -> ASCIZ name of directory in which messages are stored SeeAlso: AX=FB01h"Jot-It" --------a-2FFB03----------------------------- INT 2F U - AutoBraille v1.1A - GET NEXT ??? AX = FB03h Return: AX = ??? --------U-2FFB03----------------------------- INT 2F U - Jot-It! v1.50 - UNINSTALL AX = FB03h Return: resident code removed from memory Note: CAUTION: NO checks are performed to ensure that the interrupt vectors being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code SeeAlso: AX=FB00h"Jot-It" --------a-2FFB------------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AH = FBh AL = 04h-08h Return: AX = 0000h --------a-2FFB------------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AH = FBh AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2) Return: ??? Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. --------a-2FFB------------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AH = FBh AL = 10h-1Fh ??? Return: ??? --------a-2FFB20----------------------------- INT 2F U - AutoBraille v1.1A - SET ??? FLAGS AX = FB20h BL = flags to set SeeAlso: AX=FB21h"AutoBraille" --------a-2FFB21----------------------------- INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS AX = FB21h BL = flags to clear SeeAlso: AX=FB20h"AutoBraille" --------a-2FFB22----------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AX = FB22h BL = ??? Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. --------a-2FFB28----------------------------- INT 2F U - AutoBraille v1.1A - ??? AX = FB28h BX = ??? ??? Return: ??? SeeAlso: AX=FB29h"AutoBraille" --------a-2FFB29----------------------------- INT 2F U - AutoBraille v1.1A - ??? AX = FB29h BX = ??? ??? Return: ??? SeeAlso: AX=FB28h"AutoBraille" --------a-2FFB------------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AH = FBh AL = 2Bh-34h BX = ??? --------a-2FFB35----------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AX = FB35h BL = ??? --------a-2FFB36----------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AX = FB36h BL = ??? --------a-2FFB37----------------------------- INT 2F U - AutoBraille v1.1A - SET ??? AX = FB37h BL = ??? Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. --------E-2FFB42BX0001----------------------- INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK??? AX = FB42h BX = 0001h Return: AX = version number??? (AL=major, AH=minor) CX = next-selector increment ---BC2.0--- ES:BX -> 80-byte buffer for ??? DX = DPMI version ---BC3.0--- BX = ??? (0000h) DX = ??? ES:SI -> list of valid selectors ??? Notes: The version of DPMILOAD distributed with BC++ v2.0 identifies itself as version 1.000, while the version distributed with BC++ 3.0 identifies itself as version 1.0; the former is 10864 bytes, the latter 22180 bytes. The BC2.0 version is a DPMI loader, while the BC3.0 version also adds a DPMI host and DOS extender the BC++ 2.0 version displays an error message if called with BX values other than 0001h-0008h SeeAlso: AX=1687h,AX=FB42h/BX=1001h,AX=FB43h --------E-2FFB42BX0002----------------------- INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY AX = FB42h BX = 0002h CX = size in bytes DX = bit flags bit 2: set to allocate DOS memory, clear for DPMI memory SI = selector of descriptor to be modified to access allocated memory DI = selector of a second descriptor to be modified Return: AX = ??? or 0000h on error CX:DX = linear base address of DPMI memory block SI:DI = handle for DPMI memory block or FFFFh:FFFFh ??? Note: two segment descriptors may be set if a code and an aliased data segment are required; if only one descriptor is needed, SI should equal DI on entry BUG: when allocating DOS memory, the code computes the linear address by multiplying the segment number by 4 rather than shifting by 4 SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h --------E-2FFB42BX0002----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY AX = FB42h BX = 0002h ES:SI -> memory block info (see #03127) Return: ??? Note: The version of DPMILOAD distributed with BC++ v2.0 identifies itself as version 1.000, while the version distributed with BC++ 3.0 identifies itself as version 1.0; the former is 10864 bytes, the latter 22180 bytes. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h Format of DPMILOAD memory block info: Offset Size Description (Table 03127) 00h WORD flags (see #03128) 02h DWORD block size in bytes ---DPMI memory block--- 06h DWORD DPMI memory block handle ---DOS memory block--- 06h WORD real-mode segment of memory block 08h WORD selector of memory block --- 0Ah DWORD linear address of memory 0Eh WORD memory operation error code 0008h no more free LDT descriptors ---if flags bit 0 clear--- 10h WORD code segment selector for memory block or 0000h or FFFFh 12h WORD data alias selector for memory block or 0000h or FFFFh ---if flags bit 0 set--- 10h WORD data segment selector for memory block or 0000h or FFFFh 12h WORD unused??? Bitfields for DPMILOAD memory block flags: Bit(s) Description (Table 03128) 0 set if data segment rather than code segment 1 information valid 2 set if DOS memory block rather than DPMI memory block 4 ??? 15 set if no LDT selectors for memory block??? SeeAlso: #03127 --------E-2FFB42BX0003----------------------- INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY AX = FB42h BX = 0003h Return: DX:AX = size of largest free block in paragraphs 0000h:0000h on error (BC3.0 version only) Note: AX and DX are destroyed on error, but no other error indicator is returned, under the BC++ 2.0 version of DPMILOAD SeeAlso: AX=FB42h/BX=0002h --------E-2FFB42BX0004----------------------- INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE??? AX = FB42h BX = 0004h DS:DX -> ASCIZ filename of protected-mode executable Return: CX = selector of ??? or 0000h ---BC3.0--- DX = status (0000h,FFF4h,others???) (see #03129) Note: the filename may also be terminated by a CR rather than a NUL under the BC++ 3.0 version of DPMILOAD (Table 03129) Values for DPMILOAD function status: 0000h successful 0001h ??? failure 0002h invalid selector 0004h unknown error 0008h no more LDT descriptors available??? FFDEh unable to set descriptor FFDFh unable to get segment base address FFE0h ??? FFF2h invalid parameter value FFF4h component of filename too long (name not in 8.3 format) FFF5h pathname too long (>79 chars) FFF6h ??? FFF8h ??? FFF9h index out of range FFFAh ??? FFFCh invalid access to code segment??? FFFEh ??? FFFFh general error --------E-2FFB42BX0005----------------------- INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME AX = FB42h BX = 0005h CX = selector of DPMILOAD data (see #03130) DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored) Return: DX = status (see #03129) 0000h successful AX:BX -> ??? FAR function (called with two words on top of stk) else BX destroyed SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh Format of DPMILOAD data: Offset Size Description (Table 03130) 00h 12 BYTEs ??? 0Ch WORD ??? bit flags 0Eh 14 BYTEs ??? 1Ch WORD number of memory control records (see #03133) 1Eh 25 BYTEs ??? 37h BYTE ??? bit flags bit 4: data valid??? 38h 4 BYTEs ??? 3Ch WORD ??? 3Eh 12 BYTEs ??? 46h BYTE ??? counter 47h BYTE ??? 48h BYTE ??? 49h BYTE ??? 4Ah WORD ??? 4Ch 2 BYTEs ??? 4Eh WORD offset of array of 64-byte memory control records 52h WORD offset of name list (see #03131) 54h 4 BYTEs ??? 58h WORD offset of array of 6-byte objects (see #03132) 5Ah 8 BYTEs ??? 62h 9 BYTEs ASCIZ name for ??? 6Bh 9 BYTEs ASCIZ name for ??? ??? Format of name list entry [array]: Offset Size Description (Table 03131) 00h BYTE length of name (00h if end of array) 01h N BYTEs name N+1 WORD 1-based index into array of unknown 6-byte objects Format of 6-byte objects: Offset Size Description (Table 03132) 00h BYTE ??? 01h BYTE ??? 02h BYTE ??? 03h BYTE 1-based index of memory control record 04h WORD ??? Format of memory control record: Offset Size Description (Table 03133) 00h 20 BYTEs memory block info (see #03127) 14h 6 BYTEs ??? 1Ah BYTE ??? 1Bh 2 BYTEs ??? 1Dh BYTE ??? bit flags 1Eh 14 BYTEs ??? 2Ch DWORD pointer to ??? memory control record or 0000h:0000h 30h DWORD pointer to ??? memory control record or 0000h:0000h 34h DWORD pointer to next??? memory control record or 0000h:0000h 38h DWORD pointer to prev??? memory control record or 0000h:0000h 3Ch 4 BYTEs ??? Note: the pointers at offsets 2Ch and 30h form a doubly-linked list, as do the pointers at offsets 34h and 38h --------E-2FFB42BX0006----------------------- INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER AX = FB42h BX = 0006h CX = selector of DPMILOAD data (see #03130) DX = 1-based index into array of ??? 6-byte objects Return: DX = status (see #03129) 0000h successful AX:BX -> ??? FAR function (called with two words on top of stk) else BX destroyed SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh --------E-2FFB42BX0007----------------------- INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0007h CX = selector of ??? Return: ??? Note: The version of DPMILOAD distributed with BC++ v2.0 identifies itself as version 1.000, while the version distributed with BC++ 3.0 identifies itself as version 1.0; the former is 10864 bytes, the latter 22180 bytes. --------E-2FFB42BX0007----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0007h CX = selector of DPMILOAD data (see #03130) ??? Return: DX = status (see #03129) 0000h successful AX = ??? --------E-2FFB42BX0008----------------------- INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK AX = FB42h BX = 0008h CX = bit flags bit 2: set if DPMI memory, clear if DOS memory DX = selector of DOS memory block SI:DI = handle of DPMI memory block Return: DX = 0000h on error, unchanged if succcessful Note: The version of DPMILOAD distributed with BC++ v2.0 identifies itself as version 1.000, while the version distributed with BC++ 3.0 identifies itself as version 1.0; the former is 10864 bytes, the latter 22180 bytes. SeeAlso: AX=FB42h/BX=0002h --------E-2FFB42BX0008----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK AX = FB42h BX = 0008h ES:SI -> memory block info (see #03127) Return: ??? SeeAlso: AX=FB42h/BX=0009h --------E-2FFB42BX0009----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK AX = FB42h BX = 0009h ES:SI -> memory block info (see #03127) ??? Return: ??? SeeAlso: AX=FB42h/BX=0008h"3.0" --------E-2FFB42BX000A----------------------- INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL AX = FB42h BX = 000Ah CX = 0001h DX = ??? SI = ??? Return: after user exits subshell Notes: this call is used by DPMIRES; unlike most of the DPMILOAD calls, this function is not available in protected mode. the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0 version also adds a DPMI host and DOS extender. SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h --------E-2FFB42BX000B----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED AX = FB42h BX = 000Bh --------E-2FFB42BX000C----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK??? AX = FB42h BX = 000Ch ES:SI -> memory block info ??? (see #03127) Return: DX = status??? SeeAlso: AX=FB42h/BX=000Fh --------E-2FFB42BX000D----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT AX = FB42h BX = 000Dh CX = number of words to copy from protected-mode to real mode stack DL = interrupt number DH = flags bit 0: reset the interrupt controller and A20 line ES:DI -> real-mode call structure (see #03148 at INT 31/AX=0300h) Return: CX = status 0000h successful 0001h failed SeeAlso: INT 31/AX=0300h --------E-2FFB42BX000E----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ??? AX = FB42h BX = 000Eh DS:DX -> ASCIZ or CR-terminated name of ??? Return: CX = selector of DPMILOAD data (see #03130) corresponding to name, 0000h on error SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh --------E-2FFB42BX000F----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK??? AX = FB42h BX = 000Fh ES:SI -> memory block info (see #03127) Return: ??? SeeAlso: AX=FB42h/BX=000Ch --------E-2FFB42BX0010----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR AX = FB42h BX = 0010h DX = segment number Return: CX = status (0000h,0008h) (see also AX=FB42h/BX=0004h) 0000h successful DX = selector number for descriptor 0008h failed SeeAlso: AX=FB42h/BX=0023h --------E-2FFB42BX0011----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0011h CX = selector of DPMILOAD data (see #03130) ??? Return: DX = status (0000h,0002h,FFFEh) (see also #03129) 0000h successful AX:BX -> ??? name FFFEh ??? error --------E-2FFB42BX0012----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0012h CX = selector for ??? Return: CX = selector for ??? --------E-2FFB42BX0013----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0013h CX = selector of DPMILOAD data (see #03130) DX = 1-based index of ??? Return: CX = status (0000h,0002h,FFF9h) (see also #03129) 0000h successful BX = ??? or 0000h FFF9h ??? error --------E-2FFB42BX0014----------------------- INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INSTALLATION CHECK AX = FB42h BX = 0014h CX = 0001h Return: BX = 0000h if installed Note: unlike most of the DPMILOAD functions, this call is available only in real or V86 mode SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=000Ah --------E-2FFB42BX0015----------------------- INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - UNINSTALL AX = FB42h BX = 0015h CX = 0001h Return: ??? Note: unlike most of the DPMILOAD functions, this call is available only in real or V86 mode SeeAlso: AX=FB42h/BX=000Ah --------E-2FFB42BX0016----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ??? AX = FB42h BX = 0016h CX = selector of DPMILOAD data (see #03130) Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful CX = ??? --------E-2FFB42BX0017----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0017h CX = ??? DX = ??? ??? Return: DX = status (0000h,0001h) (see #03129) --------E-2FFB42BX0018----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ??? AX = FB42h BX = 0018h CX = ??? --------E-2FFB42BX0019----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0019h CX = selector for ??? ??? Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful CX = selector for ??? --------E-2FFB42BX001A----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 001Ah CX = selector for ??? ??? Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful 0004h failed CX:BX -> ??? --------E-2FFB42BX001B----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 001Bh CX = selector of DPMILOAD data (see #03130) DX = offset of ??? Return: DX = status (0000h,0002h) (see also #03129) 0000h successful BX = selector for ??? CX = selector for ??? --------E-2FFB42BX001C----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 001Ch ES = selector for DPMILOAD data (see #03130) CX = 1-based index of ??? DX = 1-based index of ??? Return: DX = status (0000h,0002h,FFF9h) (see #03129) --------E-2FFB42BX001D----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ??? AX = FB42h BX = 001Dh Return: CX:DX = ??? --------E-2FFB42BX001E----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 001Eh CX = ??? ??? Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful FFF7h ??? error CX:BX -> ??? --------E-2FFB42BX001F----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ??? AX = FB42h BX = 001Fh DS:DX -> 8-character name of ??? ??? Return: CX = selector of DPMILOAD data (see #03130) for ??? 0000h on error SeeAlso: AX=FB42h/BX=000Eh --------E-2FFB42BX0020----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION??? AX = FB42h BX = 0020h Return: DX = ??? (always 0000h) --------E-2FFB42BX0021----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT AX = FB42h BX = 0021h CL = exception number (00h-1Fh) Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful AX:BX = selector:offset of handler FFF2h unable to get exception handler vector SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h --------E-2FFB42BX0022----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT AX = FB42h BX = 0022h CL = exception number (00h-1Fh) SI:DX = selector:offset of new handler Return: DX = status (0000h,0004h,FFF2h) (see #03129) SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h --------E-2FFB42BX0023----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER AX = FB42h BX = 0023h CX = selector Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful CX = real-mode segment number FFF2h descriptor has invalid base address for real-mode segment SeeAlso: AX=FB42h/BX=0010h --------E-2FFB42BX0024----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR AX = FB42h BX = 0024h CL = interrupt number Return: DX = status (0000h) (see also AX=FB42h/BX=0004h) AX:BX = selector:offset of handler SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h --------E-2FFB42BX0025----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR AX = FB42h BX = 0025h CL = interrupt number SI:DX = selector:offset of new handler Return: DX = status (0000h,0004h,FFF2h) (see #03129) SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h --------E-2FFB42BX0026----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ??? AX = FB42h BX = 0026h CX = selector of DPMILOAD data (see #03130) DX = 1-based index of ??? ??? Return: DX = status (0000h,0002h,FFF9h) (see #03129) 0000h successful BX = offset of ??? within data structure --------E-2FFB42BX0027----------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ??? AX = FB42h BX = 0027h CX = selector of DPMILOAD data (see #03130) DX = offset of ??? Return: DX = status (see also AX=FB42h/BX=0004h) 0000h successful BX = ??? --------E-2FFB42BX0080----------------------- INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE AX = FB42h BX = 0080h ??? Return: AX = ??? ??? --------E-2FFB42BX0081----------------------- INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE AX = FB42h BX = 0081h ??? Return: AX = ??? ??? --------E-2FFB42BX1001----------------------- INT 2F U - Borland RTM.EXE 1.0 - INSTALLATION CHECK??? AX = FB42h BX = 1001h Return: BX = 0000h SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=1002h,AX=FB42h/BX=1003h --------E-2FFB42BX1002----------------------- INT 2F U - Borland RTM.EXE 1.0 - EXECUTE COMPILED PROGRAM AX = FB42h BX = 1002h DX = 0014h ??? ??? Return: AX = nonzero if successful AH = child program exit method??? (usually 4Ch) AL = child program exit code (Errorlevel) AX = 0000h on load error DX = error code (0000h-0027h) (see #03134) SeeAlso: AX=FB42h/BX=1001h (Table 03134) Values for RTM.EXE error code: 01h out of memory 02h out of selectors 03h out of internal tables 10h internal error 18h internal error 1Ah internal error 1Bh internal error 1Ch internal error 20h invalid dynamic link 21h internal error 22h unable to open file 23h invalid .EXE format 24h wrong version 25h unable to initialize 26h DLL initialization error other unrecognized error --------E-2FFB42BX1003----------------------- INT 2F U - Borland RTM.EXE 1.0 - ??? AX = FB42h BX = 1003h ??? Return: ??? SeeAlso: AX=FB42h/BX=1001h --------E-2FFB43----------------------------- INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION AX = FB43h BX = subfunction (at least 0000h-000Eh) Notes: this function is only present in protected mode; it does nothing but an immediate IRET DPMILOAD.EXE itself calls various subfunctions: subfunction 0004h is called with CX=selector of ???, DI=selector of DPMILOAD data subfunction 0008h is called with CX=selector of DPMILOAD data SeeAlso: AX=FB42h/BX=0001h --------G-2FFB43BX0100----------------------- INT 2F PU - Borland TDX - INSTALLATION CHECK AX = FB43h BX = 0100h Return: BX = FB43h if loaded Program: TDX is Borland's Turbo Debugger variant for DPMI programs Note: Borland Pascal 7 DPMI programs use this call to check whether they should install their own stack and general protection exception handlers, or allow TDX to handle those exceptions --------a-2FFB64----------------------------- INT 2F U - AutoBraille v1.1A - GET ??? AX = FB64h Return: AX = ??? (0006h seen) Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc. --------E-2FFBA1BX0081----------------------- INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK AX = FBA1h BX = 0081h ES:DI -> 16-byte buffer Return: if installed, first four bytes of ES:DI buffer are "IABH" Program: TKERNEL is a licensed version of AI Architects/Ergo's OS/x86. Note: TKERNEL was present only in Borland C++ 2.0; with version 3.0, the DOS extender was moved into DPMILOAD. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h SeeAlso: INT 21/AX=4403h"AI Architects" --------E-2FFBA1BX0082----------------------- INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT AX = FBA1h BX = 0082h ES:DI -> response buffer (see #03135) Return: ES:DI buffer filled SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h Format of TKERNEL response buffer: Offset Size Description (Table 03135) 00h 4 BYTEs signature "IABH" 04h DWORD pointer to FAR extender entry point (see #03136) (Table 03136) Call TKERNEL entry point with: AX = function number 0000h initialize??? STACK: WORD ??? Return: AX = status??? STACK unchanged 0001h get version??? Return: AX = 0200h for v2.0.34 0002h get ??? Return: AX = ??? (011Eh or 0182h seen) 0003h load protected-mode executable STACK: DWORD -> ASCIZ filename of executable DWORD ??? DWORD -> program arguments (counted string plus CR) DWORD -> environment for protected-mode executable (terminated with two consecutive NULs) DWORD -> WORD buffer for ??? Return: AX = status??? STACK unchanged 0004h get descriptor STACK: WORD selector for which to get descriptor WORD segment number (when running in real mode) DWORD -> buffer for descriptor Return: CF clear if successful buffer filled CF set on error AX destroyed??? STACK unchanged 0005h ??? STACK: WORD selector for ??? WORD subfunction number??? 0000h run previously-loaded program??? 0001h ??? (similar to 0000h) 0002h 0003h 0005h ??? (similar to 0000h and 0001h) Return: AX = status??? STACK unchanged 0006h ??? STACK: WORD ??? DWORD -> WORD (call) max iterations of ??? (ret) remaining iterations Return: AX = ??? STACK unchanged 0007h unused Return: AX = 0001h 0008h unused Return: AX = 0001h 0009h copy protected-mode memory into conventional memory STACK: WORD selector for source segment WORD segment of source if in real mode??? DWORD offset of source WORD number of bytes to copy DWORD -> low-memory destination Return: AX = status STACK unchanged 000Ah copy conventional memory into protected-mode memory STACK: WORD selector for destination segment WORD segment of destination if in real mode??? DWORD offset of destination WORD number of bytes to copy DWORD -> low-memory source Return: AX = status STACK unchanged 000Bh get ??? pointers STACK: WORD desired pointer 0000h get ??? 0002h get protected-mode CR3 0003h get 4K page table buffer pointer else Return: DX:AX = FFFFh:FFFFh Return: DX:AX = requested pointer STACK unchanged 000Ch set ??? pointers STACK: WORD desired pointer 0000h set ??? 0002h set protected-mode CR3 0003h set 4K page table buffer pointer else ignore DWORD new value for pointer Return: STACK unchanged 000Dh get ??? pointers STACK: WORD desired pointer 0000h get ??? 0001h get ??? 0002h get ??? 0003h get ??? 0004h get ??? 0005h get ??? 0006h get ??? 0007h get ??? else Return: DX:AX = FFFFh:FFFFh Return: DX:AX = desired pointer STACK unchanged 000Eh set ??? pointer STACK: WORD desired pointer 0000h set ??? 0001h set ??? 0002h set ??? 0003h set ??? 0004h set ??? 0005h set ??? 0006h set ??? 0007h set ??? else Return: DX:AX = FFFFh:FFFFh Return: STACK unchanged 000Fh get ??? Return: AX = ??? (seen 0008h) 0010h get ??? Return: AX = ??? 0011h determine whether selector is valid STACK: WORD possible selector Return: AX = selector or 0000h if invalid STACK unchanged 0012h get physical address STACK: WORD selector for desired segment WORD segment number if in real mode DWORD offset within segment Return: DX:AX = 32-bit physical address or 00000000h on error BX destroyed STACK unchanged 0013h ??? Note: normally jumps to code for function 0012h 0014h copy protected-mode memory to conventional memory, with ??? STACK: WORD selector for source segment WORD segment of source if in real mode??? DWORD offset of source WORD number of bytes to copy DWORD -> low-memory destination Return: AX = status??? STACK unchanged 0015h copy conventional memory to protected-mode memory, with ??? STACK: WORD selector for destination segment WORD segment of destination if in real mode??? DWORD offset of destination WORD number of bytes to copy DWORD -> low-memory source Return: AX = status??? STACK unchanged 0016h set ??? pointer STACK: WORD unused DWORD -> ??? or 0000h:0000h Return: AX = 0000h STACK unchanged 0017h allocate real-mode procedure??? STACK: DWORD ASCIZ name of procedure DWORD ??? DWORD address of subroutine to invoke Return: AX = status 0032h procedure by that name exists 0033h no more real-mode procedures available DX destroyed STACK unchanged 0018h unused Return: AX = 0001h 0019h get parameter block Return: DX:AX -> parameter block (format unknown at this time, but 92h bytes) (preceded by signature "!!PARAM-BLOCK!!") 001Ah get ??? Return: AX = ??? (0148h seen) 001Bh free real-mode procedure??? STACK: DWORD -> ASCIZ name of procedure Return: ??? STACK unchanged 001Ch check whether packets from protected mode task pending Return: AX = 0001h if packets pending, 0000h if not 001Dh set ??? STACK: DWORD ??? or 0000h:0000h Return: AX,BX destroyed STACK unchanged 001Eh ??? STACK: WORD ??? (high byte ignored) DWORD -> data structure (below) Return: AX,BX,CX,DX destroyed data structure updated STACK unchanged Format of data structure: Offset Size Description 00h 2 BYTEs unused 02h WORD ??? 04h WORD ??? 06h WORD ??? 08h 2 BYTEs unused 0Ah WORD ??? 0Ch WORD (call) ??? (ret) offset of this data structure (BUG?) 001Fh set ??? STACK: WORD ??? (set to 0001h if zero) Return: AX destroyed STACK unchanged 0020h ??? STACK: DWORD -> ??? (8 bytes of data) Return: AX = ??? STACK unchanged 0021h ??? STACK: DWORD -> ??? (8 bytes of data) WORD ??? WORD ??? Return: AX = ??? STACK unchanged 0022h ??? STACK: DWORD -> ??? (8 bytes of data) DWORD -> 4-byte buffer for results Return: AX = ??? STACK unchanged 0023h ??? STACK: DWORD -> ??? (8 bytes of data) Return: AX = ??? STACK unchanged 0024h set ??? STACK: WORD ??? Return: AX destroyed STACK unchanged 0025h get ??? Return: AX = ??? (value set with func 0024h) 0026h BUG: jumps to hyperspace due to fencepost error FFFFh set DOS memory management functions BX:SI -> FAR routine for allocating DOS memory (called with AH=48h,BX=number of paragraphs to alloc; returns CF clear, AX=segment of allocated memory, or CF set on error) CX:DI -> FAR routine for freeing DOS memory (called with AH=49h,ES=segment of block to free; returns CF set on error, AX=error code) Note: each of these pointers normally points at INT 21/RETF other Return: AX = 0001h Note: BX may be destroyed by any of the API calls --------E-2FFBA1BX0084----------------------- INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL AX = FBA1h BX = 0084h ES:DI -> response buffer (see #03137) Return: ES:DI buffer filled SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h Format of TKERNEL response buffer: Offset Size Description (Table 03137) 00h 4 BYTEs signature "IABH" 04h WORD success indicator 0001h failed (INT 2F hooked by another program) unchanged if successful 06h WORD segment of ??? 08h WORD segment of ??? memory block to free if nonzero 0Ah WORD segment of ??? memory block to free if nonzero --------s-2FFBFBES0000----------------------- INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK AX = FBFBh ES = 0000h Return: ES nonzero if installed ES:BX -> entry point data structure (see #03138) SeeAlso: INT 80/BX=0000h,INT F3"SoundBlaster" Format of SoundBlaster entry point data structure: Offset Size Description (Table 03138) 00h 3 BYTEs signature "FB " 03h BYTE driver major version number??? 04h DWORD speech driver entry point (see #03139) 08h 24 BYTEs ??? 20h ? BYTEs data buffer for calling speech driver (can be 117 bytes or more) (Table 03139) Call SoundBlaster speech driver entry point with: AL = function 07h speak a string data buffer (see #03138) contains: BYTE length of string N BYTEs string to speak --------K-2FFD12----------------------------- INT 2F - KS/KEYSTKCT.EXE - INSTALLATION CHECK AX = FD12h Return: AX = 0093h if installed ES = resident code segment ES:CX -> internal "putbuf" routine Program: KS/KEYSTKCT.EXE is a key stacking utility (4DOS KEYSTACK.SYS look-alike) by Martin Gerdes, published in c't 11/1991, which can be loaded as a device driver or as a TSR. It does not emulate 4DOS KSTACK API Note: the default buffer size is 128 keys --------N-2FFE00BX4454----------------------- INT 2F - PC-NFS ??? - INSTALLATION CHECK AX = FE00h BX = 4454h ("DT") CX = 4B52h ("KR") DX = 4E4Dh ("NM") Return: AL = FFh if installed BX = 524Eh ("RM") CX = 4D44h ("MD") DX = 544Bh ("TK") Note: DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response SeeAlso: AX=FE08h --------N-2FFE00BX4454----------------------- INT 2F - PC-NFS ??? - INSTALLATION CHECK AX = FE00h BX = 4454h ("DT") CX = 4B52h ("KR") DX = 544Dh ("TM") Return: AL = FFh if installed BX = 5254h ("RT") CX = 4D44h ("MD") DX = 544Bh ("TK") Note: DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response SeeAlso: AX=FE08h --------U-2FFE00DI4E55----------------------- INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT AX = FE00h DI = 4E55h ("NU") SI = TSR identifier (see #03140) Return: SI = TSR reply lowercase version of SI on entry (i.e. SI ORed with 2020h) execpt SMARTCAN v8.0, which returns SI=6673h ('fs') AH = status 00h installed but disabled internally 01h installed and enabled AL = installed product 00h NCACHE-x or DISKREET 01h SPEEDRV / FILESAVE / EP / DISKMON v6+ installed 02h NCACHE2 / SMARTCAN 45h DISKMON v5 installed BX = length of *.INI file (DISKMON and FILESAVE/EP/SMARTCAN only) (see #03141,#03142) CX = segment of resident portion FFFFh if completely loaded high (NCACHE) DI may be destroyed ---FILESAVE/EP--- DL = ??? (apparently always 00h) ---DISKMON--- DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6] / 1C26h [v7]) Notes: the value returned in CX is incorrect for NCACHE 6.00 all Norton Caches install as SMARTAAR drivers like SMARTDRV v3 NCACHE2 and SPEEDRV both support the SMARTDRV v4+ installation check to detect Diskreet NDisk drives use CDS/DPB (see INT 21/AH=52h) SeeAlso: AX=4A10h/BX=0000h,AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h SeeAlso: INT 21/AX=4402h"SMARTDRV" (Table 03140) Values for Norton Utilities TSR identifier: 4346h ("CF") NCACHE-F (v5) / NCACHE (v6) / NCACHE2 (v7+) / SPEEDRV 4353h ("CS") NCACHE-S (v5 only) 4443h ("DC") DISKREET 444Dh ("DM") DISKMON 4653h ("FS") FILESAVE (v5) / EP (v6) / SMARTCAN (v7+) Format of DISKMON.INI file: Offset Size Description (Table 03141) -6Ch 108 BYTEs (in memory copy only) list of filenames which are always protected: IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS, MIO.SYS/IO.BIN, COMMAND.COM 00h BYTE ??? always 01h 01h BYTE disk light (00h off, 01h on) 02h BYTE disk protection (00h off, 01h on) 03h BYTE protected areas 01h system area 02h files 03h system area and files 04h entire disk 04h BYTE floppy access (00h not allowed, 01h allowed) 05h 27 BYTEs filename extension list (9 entries) (lowercase, blank padded or = 000000h) 20h 240 BYTEs filename list (20 entries) (lowercase, name and extension blank padded, with '.') Note: CX:0508h -> copy in installed TSR (v5) CX:052Fh -> copy in installed TSR (v6) CX:04E0h -> copy in installed TSR (v7-v8) Format of FILESAVE.INI / EP.INI / SMARTCAN.INI file: Offset Size Description (Table 03142) 00h 26 BITs drive list (bit set: file protection on, cleared: off): 00h BYTE drives A: - H: 01h BYTE drives I: - P: 02h BYTE drives Q: - X: 03h BYTE drives Y: - Z: 04h BYTE which files to protect 00h all files 01h all files with extension in list 02h all files except those with extension in list 05h 27 BYTEs filename extension list (9 entries, uppercase, ASCIZ) 20h BYTE include files with archive bit clear (00h no, 01h yes) 21h WORD number of days after which files are purged (0 = never) 23h WORD max kilobytes of erased file space to hold (0 = all) Note: CX:03D2h -> copy in installed TSR (v5) CX:03F5h -> copy in installed TSR (v6) CX:0434h -> copy in installed TSR (v7-v8) --------U-2FFE00DX474F----------------------- INT 2F - GO! v3.22+ - API AX = FE00h DX = 474Fh ('GO') SI = function number 0063h (BCD for '?') installation check 0078h (BCD for 'N') non-registered search (two levels only) 0082h (BCD for 'R') reserved for registered version 0083h (BCD for 'S') reserved for registered version 0085h (BCD for 'U') uninstall BX:CX -> buffer (for search functions) buffer filled with search spec, i.e. "APL" to get first directory containing the substring APL, ":\APL" to find the first top-level directory beginning with the letters APL Return: BX:CX buffer filled with result (search functions only) result is counted ASCIZ directory name, empty string if no matches (i.e. first byte is length of name, followed by name) Program: GO! is a shareware directory locator TSR by Steve Ryckman Note: the application-supplied buffer for the requests and results which BX:CX points at must lie outside the conventional (low-640K) memory, since the TSR swaps memory on pop-up; a common location is the last 96 bytes of the video memory or a UMB --------U-2FFE01DI4E55----------------------- INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE AX = FE01h DI = 4E55h ("NU") SI = TSR identifier (see #03140) Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h) AX = status 0002h successful (DISKMON, FILESAVE, EP) FE00h successful (NCACHE-x, DISKREET) Notes: if the enable/disable calls are used on DISKMON or NCACHE-x, the status report generated by the programs still indicates the previous state, and DISKMON.INI is not updated apparently has no effect on DISKREET SeeAlso: AX=FE00h,AX=FE02h --------U-2FFE02DI4E55----------------------- INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE AX = FE02h DI = 4E55h ("NU") SI = TSR identifier (see #03140) Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h) AX = status 0004h successful (DISKMON, FILESAVE) FE00h successful (NCACHE-x, DISKREET) Notes: (see also AX=FE01h) this function appears to be unsafe, as the cache buffers are not flushed SeeAlso: AX=FE00h,AX=FE01h --------U-2FFE03DI4E55----------------------- INT 2F U - NORTON UTILITIES 5.0+ TSRs - FLUSH BUFFERS AX = FE03h DI = 4E55h ("NU") SI = TSR identifier (see #03140) Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h) AX = status 0006h successful??? Notes: only supported by DISKMON, FILESAVE, and NCACHE-x useful for flushing NCACHE before rebooting SeeAlso: AX=FE00h,AX=FE10h --------U-2FFE04DI4E55----------------------- INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ??? AX = FE04h DI = 4E55h ("NU") SI = TSR identifier (see #03140) Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h) AX = status 0008h successful??? SeeAlso: AX=FE00h --------U-2FFE05DI4E55----------------------- INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ??? AX = FE05h DI = 4E55h ("NU") SI = TSR identifier (see #03140) Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h) AX = status 000Ah successful??? Note: reportedly dangerous SeeAlso: AX=FE00h --------N-2FFE08----------------------------- INT 2F - PC-NFS ??? - GET ??? AX = FE08h Return: ES:BX -> ??? Notes: DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response both the driver responding to AX=FE00h/DX=4E4Dh and the one responding to AX=FE00h/DX=544Dh support this function SeeAlso: AX=FE00h/BX=4454h --------U-2FFE10DI4E55----------------------- INT 2F U - NORTON UTILITIES 6.0 NCACHE - REBOOT AX = FE10h DI = 4E55h ("NU") SI = TSR identifier (see #03140) Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h) AX = status Note: probably used to flush NCACHE buffers and reboot when Ctrl-Alt-Del is detected SeeAlso: AX=FE03h --------S-2FFEEF----------------------------- INT 2F - RTS Control TSR - INSTALLATION CHECK AX = FEEFh Return: AX = EFFEh if installed BX = port address Program: RTS Control TSR is a utility by Michal Szokolo to lower the RTS signal on a COM port during disk accesses to avoid losing incoming data --------N-2FFF00----------------------------- INT 2F - Topware Network Operating System - INSTALLATION CHECK AX = FF00h Return: AL = status 00h not installed, OK to install 01h not installed, not OK to install FFh installed SeeAlso: AX=FF01h,AX=FF02h,AX=FF10h,INT 21/AX=FF00h"Topware",INT 7A"Topware" --------N-2FFF01----------------------------- INT 2F - Topware Network Operating System - GET VERSION AX = FF01h Return: AX = version SeeAlso: AX=FF00h,AX=FF02h --------N-2FFF02----------------------------- INT 2F - TopWare Network OS v5.10+ - GET TopNet VERSION STRING AX = FF02h Return: ES:BX -> version string SeeAlso: AX=FF00h,AX=FF01h --------N-2FFF10----------------------------- INT 2F - TopWare Network OS v5.10+ - TopTerm - INSTALLATION CHECK AX = FF10h Return: AL = status (00h not installed, 01h installed) SeeAlso: AX=FF00h,AX=FF11h,AX=FF12h,AX=FF13h --------N-2FFF11----------------------------- INT 2F - TopWare Network OS v5.10+ - TopTerm - ENABLE KEYBOARD SERVICE AX = FF11h Note: this function is only available on workstations, not on the server SeeAlso: AX=FF10h,AX=FF12h --------N-2FFF12----------------------------- INT 2F - TopWare Network OS v5.10+ - TopTerm - DISABLE KEYBOARD SERVICE AX = FF12h Note: this function is only available on workstations, not on the server SeeAlso: AX=FF10h,AX=FF11h --------N-2FFF13----------------------------- INT 2F - TopWare Network OS v5.10+ - TopTerm - SET INSTALLATION FLAG AX = FF13h CL = new state (00h off, 01h on) SeeAlso: AX=FF10h --------N-2FFF14----------------------------- INT 2F - TopWare Network OS v5.10+ - START BACKGROUND RECEIVE VIDEO DATA AX = FF14h Note: this function is only available on workstations, not on the server SeeAlso: AX=FF10h,AX=FF15h --------N-2FFF15----------------------------- INT 2F - TopWare Network OS v5.10+ - END BACKGROUND RECEIVE VIDEO DATA AX = FF15h Note: this function is only available on workstations, not on the server SeeAlso: AX=FF10h,AX=FF14h --------N-2FFF16----------------------------- INT 2F - TopWare Network OS v5.10+ - SET CONTROL NUMBER OF "SHOW" SCREEN AX = FF16h BL = which to set (00h TopShow, FFh TopTerm) CX = destination screen 0000h all stations 0000h-00FFh (TopTerm only) send to group CL 8001h-80FEh send to station CL SeeAlso: AX=FF18h --------N-2FFF18----------------------------- INT 2F - TopWare Network OS v5.10+ - SEND FULL SCREEN OF DATA FOR TopShow AX = FF18h SeeAlso: AX=FF00h,AX=FF16h,AX=FF27h --------N-2FFF23----------------------------- INT 2F - TopWare Network OS v5.10+ - CLOSE SPOOL FILES AND START PRINTING AX = FF23h SeeAlso: AX=FF00h --------N-2FFF27----------------------------- INT 2F - TopWare Network OS v5.10+ - GET "SHOW" TYPE AX = FF27h Return: AL = type (00h complete version, 01h simple version) BL = "show" functions flag (00h disabled, 01h enabled) SeeAlso: AX=FF16h,AX=FF18h --------D-30--------------------------------- INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls the CALL 5 entry point does a FAR jump to here Note: under DOS 2+, the instruction at PSP:0005 points two bytes too low in memory SeeAlso: INT 21/AH=26h --------V-30--------------------------------- INT 30 - QRIP/TSR - USED BY GRAPHICS LIBRARY Program: QRIP/TSR is a shareware TSR by Shane Hathaway implementing the Remote Imaging Protocol (RIP, RIPscrip) used by several BBS systems to provide a graphical user interface SeeAlso: INT 2F/AX=ACF0h --------W-30--------------------------------- INT 30 P - MS Windows 3.1+ - PROTECTED-MODE CALLBACK SeeAlso: INT 20"Windows" --------D-31--------------------------------- INT 31 - overwritten by CP/M jump instruction in INT 30 --------v-31--------------------------------- INT 31 - VIRUS - "Vacsina" series - INSTALLATION CHECK (NOT A VECTOR!) Note: if one of the Vacsina viruses is resident, the low byte of this interrupt still contains the last byte of the INT 30 CP/M JMP instruction, but the remaining three bytes are 7Fh 39h followed by the Vacsina version number SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 32"VIRUS" --------E-310000----------------------------- INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS AX = 0000h CX = number of descriptors to allocate Return: CF clear if successful AX = base selector CF set on error AX = error code (DPMI 1.0+) (see #03143) Notes: DPMI is the DOS Protected-Mode Interface the base and limit of the returned descriptors will be 0, and the type will be "data" add the value returned by INT 31/AX=0003h to move to subsequent descriptors if multiple descriptors were allocated not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0001h,AX=000Dh,INT 21/AX=3501h (Table 03143) Values for DPMI 1.0 error code: 0000h-7FFFh DOS error passed through by DPMI 8001h unsupported function 8002h object in wrong state for function 8003h system integrity would be endangered 8004h deadlock detected 8005h pending serialization request cancelled 8010h out of DPMI internal resources 8011h descriptor unavailable 8012h linear memory unavailable 8013h physical memory unavailable 8014h backing store unavailable 8015h callback unavailable 8016h handle unavailable 8017h maximum lock count exceeded 8018h shared memory already serialized exclusively by another 8019h shared memory already serialized shared by another client 8021h invalid value for numeric or flag parameter 8022h invalid segment selector 8023h invalid handle 8024h invalid callback 8025h invalid linear address 8026h request not supported by hardware --------E-310001----------------------------- INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR AX = 0001h BX = selector to free Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8022h) (see #03143) Notes: only one descriptor is freed per call the program's initial CS, DS, and SS descriptors may be freed (DPMI 1.0+) any segment registers containing the freed selector are set to 0000h not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0000h,AX=000Ah,AX=000Dh,INT 21/AX=3502h --------E-310002----------------------------- INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR AX = 0002h BX = real mode segment Return: CF clear if successful AX = selector corresponding to real mode segment (64K limit) CF set on error AX = error code (DPMI 1.0+) (8011h) (see #03143) Notes: multiple calls for the same real mode segment return the same selector the returned descriptor can never be modified or freed not supported by MS Windows 3.0 in Standard mode --------E-310003----------------------------- INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE AX = 0003h Return: CF clear AX = value to add to get next sequential selector Notes: the increment will be a power of two not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0000h --------E-310004----------------------------- INT 31 P - DPMI 0.9+ - LOCK SELECTOR AX = 0004h BX = selector to lock (prevent paging) Return: ??? Note: although marked as reserved in versions 0.9 and 1.0 of the DPMI specification, this function is called by MS Windows TASKMAN, PROGMAN, and KERNEL SeeAlso: AX=0005h,AX=0600h --------E-310005----------------------------- INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR AX = 0005h BX = selector to unlock (permit paging) Return: ??? Note: although marked as reserved in versions 0.9 and 1.0 of the DPMI specification, this function is called by MS Windows TASKMAN, PROGMAN, and KERNEL SeeAlso: AX=0004h,AX=0601h --------E-310006----------------------------- INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS AX = 0006h BX = selector Return: CF clear if successful CX:DX = linear base address of segment CF set on error AX = error code (DPMI 1.0+) (8022h) (see #03143) Note: not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0007h,INT 21/AX=3504h --------E-310007----------------------------- INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS AX = 0007h BX = selector CX:DX = linear base address Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8022h,8025h) (see #03143) Notes: only modify descriptors allocated with INT 31/AX=0000h only the low 24 bits of the address will be used by 16-bit DPMI implementations even on a 386 or higher DPMI 1.0+ automatically reloads any segment registers containing the selector being modified not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AX=3503h SeeAlso: INT 21/AH=E9h"OS/286",INT 2C/AX=0002h --------E-310008----------------------------- INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT AX = 0008h BX = selector CX:DX = segment limit Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #03143) Notes: CX must be zero for 16-bit DPMI implementations limits greater than 1MB must be page aligned (low 12 bits set) only modify descriptors allocated with INT 31/AX=0000h DPMI 1.0+ automatically reloads any segment registers containing the selector being modified not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AX=3505h,INT 21/AH=E9h"OS/286" SeeAlso: INT 2C/AX=0003h,#00501 at INT 15/AH=89h --------E-310009----------------------------- INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS AX = 0009h BX = selector CL = access rights/type byte (see #00502 at INT 15/AH=89h) CH = 80386 extended rights/type byte (see #00505 at INT 15/AH=89h) (32-bit DPMI implementations only) Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #03143) Notes: if the Present bit is clear, CL bits 0-3 may have any value DPMI 1.0+ automatically reloads any segment registers containing the selector being modified not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h,INT 2C/AX=0004h SeeAlso: INT 2C/AX=0005h --------E-31000A----------------------------- INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR AX = 000Ah BX = selector Return: CF clear if successful AX = new data selector CF set on error AX = error code (DPMI 1.0+) (8011h,8022h) (see #03143) Notes: fails if selector in BX is not a code segment or is invalid use INT 31/AX=0001h to free new selector future changes to the original selector will not be reflected in the returned alias selector not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0001h --------E-31000B----------------------------- INT 31 P - DPMI 0.9+ - GET DESCRIPTOR AX = 000Bh BX = LDT selector ES:(E)DI -> 8-byte buffer for copy of descriptor Return: CF clear if successful buffer filled CF set on error AX = error code (DPMI 1.0+) (8022h) (see #03143) Notes: 16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=000Ch --------E-31000C----------------------------- INT 31 P - DPMI 0.9+ - SET DESCRIPTOR AX = 000Ch BX = LDT selector ES:(E)DI -> 8-byte buffer containing descriptor Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #03143) Notes: 16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI only modify descriptors allocated with INT 31/AX=0000h DPMI 1.0+ automatically reloads any segment registers containing the selector being modified not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=000Bh --------E-31000D----------------------------- INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR AX = 000Dh BX = LDT selector Return: CF clear if successful descriptor allocated CF set on error AX = error code (DPMI 1.0+) (8011h,8022h) (see #03143) Notes: free descriptor with INT 31/AX=0001h the first 16 descriptors (04h-7Ch) are reserved for this function, but some may already be in use by other applications under DPMI 0.9; DPMI 1.0 guarantees 16 descriptors per client not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0000h,AX=0001h --------E-31000E----------------------------- INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS AX = 000Eh CX = number of descriptors to copy ES:(E)DI -> descriptor buffer (see #03144) Return: CF clear if successful descriptors copied CF set on error AX = error code (8022h) (see #03143) CX = number of descriptors successfully copied Notes: 16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI if the function fails, the first CX descriptors are valid; the remainder are not modified SeeAlso: AX=000Bh,AX=000Fh Format of DPMI descriptor buffer entry (one per descriptor to get): Offset Size Description (Table 03144) 00h WORD selector (set by client) 02h QWORD descriptor (set by host) --------E-31000F----------------------------- INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS AX = 000Fh CX = number of descriptors to copy ES:(E)DI -> descriptor buffer (see #03145) Return: CF clear if successful descriptors copied CF set on error AX = error code (8021h,8022h,8025h) (see #03143) CX = number of descriptors successfully copied Notes: 16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI if the function fails, the first CX descriptors are valid; the remainder are not modified DPMI 1.0+ automatically reloads any segment registers containing a selector being modified SeeAlso: AX=000Ch,AX=000Eh Format of DPMI descriptor buffer entry (one per descriptor to set): Offset Size Description (Table 03145) 00h WORD selector 02h QWORD descriptor --------E-310100----------------------------- INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK AX = 0100h BX = number of paragraphs to allocate Return: CF clear if successful AX = real mode segment of allocated block DX = first selector for allocated block CF set on error AX = DOS error code (07h,08h) (see #01680 at INT 21/AH=59h/BX=0000h) (DPMI 1.0+) DPMI error code (8011h) (see #03143) BX = size (in paragraphs) of largest available block Notes: multiple contiguous selectors are allocated for blocks of more than 64K if the caller is a 16-bit program never modify or deallocate returned descriptors not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0101h,AX=0501h --------E-310101----------------------------- INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK AX = 0101h DX = selector of block Return: CF set if successful CF set on error AX = DOS error code (07h,09h) (see #01680 at INT 21/AH=59h/BX=0000h) Notes: all descriptors allocated for the block are automatically freed DPMI 1.0+ automatically zeros any segment registers containing a selector freed by this function not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0100h,AX=0102h,AX=0502h --------E-310102----------------------------- INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK AX = 0102h BX = new block size in paragraphs DX = selector of block Return: CF clear if successful CF set on error AX = DOS error code (07h,08h,09h) (see #01680 at INT 21/AH=59h/BX=0000h) (DPMI 1.0+) DPMI error code (8011h,8022h) (see #03143) BX = maximum block size (in paragraphs) possible Notes: increasing the size of a block past a 64K boundary will fail if the next descriptor in the LDT is already in use shrinking a block past a 64K boundary will cause some selectors to be freed; DPMI 1.0+ automatically zeros any segment registers containing a selector freed by this function not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0100h --------E-310200----------------------------- INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR AX = 0200h BL = interrupt number Return: CF clear CX:DX = segment:offset of real mode interrupt handler Note: the DPMI implementation is required to support all 256 vectors SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h --------E-310201----------------------------- INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR AX = 0201h BL = interrupt number CX:DX = segment:offset of real mode handler Return: CF clear Note: all memory that may be touched by a hardware interrupt handler must be locked down with INT 31/AX=0600h SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h --------E-310202----------------------------- INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR AX = 0202h BL = exception number (00h-1Fh) Return: CF clear if successful CX:(E)DX = selector:offset of handler CF set on error AX = error code (DPMI 1.0+) (8021h) (see #03143) Notes: 16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX DPMI 1.0+ supports this function only for backward compatibility; use AX=0210h or AX=0211h instead not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h --------E-310203----------------------------- INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR AX = 0203h BL = exception number (00h-1Fh) CX:(E)DX = selector:offset of handler Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8021h,8022h) (see #03143) Notes: 32-bit programs must supply an offset in EDX and use a 32-bit interrupt stack frame on chaining to the next exception handler the handler should return using a FAR return all fault stack frames contain an error code, but it is only valid for exceptions 08h and 0Ah-0Eh handlers will only be called if the exception occurs in protected mode, and the DPMI host does not transparently handle the exception the handler may change certain values on the stack frame (see #03146,#03147) DPMI 1.0+ supports this function only for backward compatibility; use AX=0212h or AX=0213h instead not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h Format of stack frame for 16-bit programs: (offset from SS:SP) Offset Size Description (Table 03146) 00h DWORD return CS:IP (do not change) 04h WORD error code 06h DWORD CS:IP of exception 0Ah WORD flags 0Ch DWORD SS:SP Format of stack frame for 32-bit programs: (offset from SS:ESP) Offset Size Description (Table 03147) 00h DWORD return EIP (do not change) 04h WORD return CS selector (do not change) 06h WORD reserved (do not change) 08h DWORD error code 0Ch DWORD EIP of exception 10h WORD CS selector of exception 12h WORD reserved (do not change) 14h DWORD EFLAGS 18h DWORD ESP 1Ch WORD SS 1Eh WORD reserved (do not change) --------E-310204----------------------------- INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR AX = 0204h BL = interrupt number Return: CF clear CX:(E)DX = selector:offset of handler Notes: 16-bit programs use CX:DX, 32-bit programs use CX:EDX DPMI implementations are required to support all 256 vectors not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2C/AX=0006h SeeAlso: INT 2F/AX=FB42h/BX=0024h --------E-310205----------------------------- INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR AX = 0205h BL = interrupt number CX:(E)DX = selector:offset of handler Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8022h) (see #03143) Notes: 16-bit programs use CX:DX, 32-bit programs use CX:EDX 32-bit programs must use a 32-bit interrupt stack frame when chaining to the next handler DPMI implementations are required to support all 256 vectors hardware interrupts are reflected to the virtual machine's primary client, software interrupts to the current client not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2C/AX=0007h SeeAlso: INT 2F/AX=FB42h/BX=0025h --------E-310210----------------------------- INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER AX = 0210h BL = exception number (00h-1Fh) Return: CF clear if successful CX:(E)DX = selector:offset of exception handler CF set on error AX = error code (8021h) (see #03143) Note: DPMI host reflects exception to current client's handler SeeAlso: AX=0202h,AX=0211h,AX=0212h --------E-310211----------------------------- INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER AX = 0211h BL = exception number (00h-1Fh) Return: CF clear if successful CX:(E)DX = selector:offset of exception handler CF set on error AX = error code (8021h) (see #03143) Notes: returns address of protected-mode handler for real-mode exception DPMI host performs a switch to protected mode, reflects the exception to the virtual machine's primary client, and returns to real mode on the handler's completion SeeAlso: AX=0202h,AX=0210h,AX=0213h --------E-310212----------------------------- INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER AX = 0212h BL = exception or fault number (00h-1Fh) CX:(E)DX = exception handler selector:offset Return: CF clear if successful CF set on error AX = error code (8021h,8022h) (see #03143) Note: DPMI host sends exception to current client's handler SeeAlso: AX=0203h,AX=0210h,AX=0213h --------E-310213----------------------------- INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER AX = 0213h BL = exception or fault number (00h-1Fh) CX:(E)DX = exception handler selector:offset Return: CF clear if successful CF set on error AX = error code (8021h,8022h) (see #03143) Notes: specifies address of protected-mode handler for real-mode exception DPMI host performs a switch to protected mode, reflects the exception to the virtual machine's primary client, and returns to real mode on the handler's completion SeeAlso: AX=0203h,AX=0211h,AX=0212h --------E-310300----------------------------- INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT AX = 0300h BL = interrupt number BH = flags bit 0: reset the interrupt controller and A20 line (DPMI 0.9) reserved, must be 0 (DPMI 1.0+) others: reserved, must be 0 CX = number of words to copy from protected mode to real mode stack ES:(E)DI = selector:offset of real mode call structure (see #03148) Return: CF clear if successful real mode call structure modified (all fields except SS:SP, CS:IP filled with return values from real mode interrupt) CF set on error AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #03143) protected mode stack unchanged Notes: 16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI CS:IP in the real mode call structure is ignored for this call, instead, the indicated interrupt vector is used for the address the flags in the call structure are pushed on the real mode stack to form an interrupt stack frame, and the trace and interrupt flags are clear on entry to the handler DPMI will provide a small (30 words) real mode stack if SS:SP is zero the real mode handler must return with the stack in the same state as it was on being called SeeAlso: AX=0302h,AX=FF01h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286" SeeAlso: INT 2C/AX=0026h,INT 2F/AX=FB42h/BX=000Dh Format of DPMI real mode call structure: Offset Size Description (Table 03148) 00h DWORD EDI 04h DWORD ESI 08h DWORD EBP 0Ch DWORD reserved (00h) 10h DWORD EBX 14h DWORD EDX 18h DWORD ECX 1Ch DWORD EAX 20h WORD flags 22h WORD ES 24h WORD DS 26h WORD FS 28h WORD GS 2Ah WORD IP 2Ch WORD CS 2Eh WORD SP 30h WORD SS --------E-310301----------------------------- INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME AX = 0301h BH = flags bit 0: reset the interrupt controller and A20 line (DPMI 0.9) reserved, must be 0 (DPMI 1.0+) others: reserved must be 0 CX = number of words to copy from protected mode to real mode stack ES:(E)DI = selector:offset of real mode call structure (see #03148 at INT 31/AX=0300h) Return: CF clear if successful real mode call structure modified (all fields except SS:SP, CS:IP filled with return values from real mode interrupt) CF set on error AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #03143) protected mode stack unchanged Notes: 16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI the real mode procedure must exit with a FAR return DPMI will provide a small (30 words) real mode stack if SS:SP is zero the real mode handler must return with the stack in the same state as it was on being called SeeAlso: AX=0300h,AX=0302h,AX=FF02h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286" SeeAlso: INT 2C/AX=0025h --------E-310302----------------------------- INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME AX = 0302h BH = flags bit 0: reset the interrupt controller and A20 line (DPMI 0.9) reserved, must be 0 (DPMI 1.0+) others: reserved, must be 0 CX = number of words to copy from protected mode to real mode stack ES:(E)DI = selector:offset of real mode call structure (see #03148 at INT 31/AX=0300h) Return: CF clear if successful real mode call structure modified (all fields except SS:SP, CS:IP filled with return values from real mode interrupt) CF set on error AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #03143) protected mode stack unchanged Notes: 16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI the flags in the call structure are pushed on the real mode stack to form an interrupt stack frame, and the trace and interrupt flags are clear on entry to the handler the real mode procedure must exit with an IRET DPMI will provide a small (30 words) real mode stack if SS:SP is zero the real mode handler must return with the stack in the same state as it was on being called SeeAlso: AX=0300h --------E-310303----------------------------- INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS AX = 0303h DS:(E)SI = selector:offset of procedure to call ES:(E)DI = selector:offset of real mode call structure (see #03148) Return: CF clear if successful CX:DX = segment:offset of real mode call address (see #03149) CF set on error AX = error code (DPMI 1.0+) (8015h) (see #03143) Notes: the real mode call structure is static, causing reentrancy problems; its contents are only valid at the time of a callback the called procedure must modify the real mode CS:IP before returning values are returned to real mode by modifying the real mode call struc DPMI hosts must provide at least 16 callbacks per client the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 does not support this function BUG: Windows NT 4.0 either ignores or clears the high 16 bits of EDI, causing an illegal instruction error if the real mode call structure's offset in ES is greater than 64K SeeAlso: AX=0304h,AX=0C00h (Table 03149) Values DPMI real-mode callback procedure is called with: DS:(E)SI = selector:offset of real mode SS:SP ES:(E)DI = selector:offset of real mode call structure SS:(E)SP = locked protected mode API stack interrupts disabled Return: (with IRET) ES:(E)DI = selector:offset of real mode call structure to restore --------E-310304----------------------------- INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS AX = 0304h CX:DX = real mode callback address Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8024h) (see #03143) Note: the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 does not support this function SeeAlso: AX=0303h --------E-310305----------------------------- INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES AX = 0305h Return: CF clear AX = size in bytes of state buffer BX:CX = real mode address of procedure to save/restore state SI:(E)DI = protected mode procedure to save/restore state (see #03150) Notes: the buffer size will be zero if it is not necessary to preserve state 16-bit programs should call SI:DI, 32-bit programs should call SI:EDI this function is only needed if using the raw mode switch service SeeAlso: AX=0306h (Table 03150) Call DPMI state-save procedures with: AL = direction 00h save state 01h restore state ES:(E)DI -> state buffer Return: all registers preserved --------E-310306----------------------------- INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES AX = 0306h Return: CF clear BX:CX -> procedure to switch from real to protected mode (see #03151) SI:(E)DI -> procedure to switch from protected to real mode Notes: 16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI the caller must save and restore the state of the task with AX=0305h not supported by MS Windows 3.0 in Standard mode SeeAlso: AX=0305h (Table 03151) Values to JUMP at mode-switch procedures with: AX = new DS CX = new ES DX = new SS (E)BX = new (E)SP SI:(E)DI = new CS:(E)IP Notes: BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX, DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h interrupts will stay disabled during the entire mode switch if they are disabled on entry to the mode-switch procedure --------E-310400----------------------------- INT 31 P - DPMI 0.9+ - GET DPMI VERSION AX = 0400h Return: CF clear AH = major version of DPMI spec supported AL = two-digit minor version of DPMI spec supported BX = DPMI host flags (see #03152) CL = processor type (02h=80286, 03h=80386, 04h=80486) DH = curr value of virtual master interrupt controller base interrupt DL = curr value of virtual slave interrupt controller base interrupt BUG: Windows NT versions from the March 1993 beta to at least the Final release with fixes to CSD002 report version 0090h (0.144); this has reportedly been corrected in the Windows NT 3.5 beta SeeAlso: AX=0401h,INT 21/AX=250Ch,INT 2F/AX=1687h,INT 4B/AX=8102h/DX=0000h SeeAlso: INT 67/AX=DE0Ah Bitfields for DPMI host flags: Bit(s) Description (Table 03152) 0 running under an 80386 (32-bit) implementation 1 processor returns to real mode for reflected interrupts instead of V86 mode 2 virtual memory supported 3 reserved (undefined) 4-15 reserved (zero) --------E-310401----------------------------- INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES AX = 0401h ES:(E)DI -> 128-byte buffer for host description (see #03153) Return: CF clear if successful AX = capabilities (see #03154) CX = reserved (00h) DX = reserved (00h) buffer filled CF set on error (DPMI 0.9 only) SeeAlso: AX=0400h Format of DPMI host description: Offset Size Description (Table 03153) 00h BYTE host major version number 01h BYTE host minor version number 02h 126 BYTEs ASCIZ host vendor name Bitfields for DPMI capabilities: Bit(s) Description (Table 03154) 0 paged accessed/dirty supported (see AX=0506h,AX=0507h) 1 exceptions restartability supported 2 device mapping supported (see AX=0508h) 3 conventional memory mapping supported (see AX=0509h) 4 demand zero-fill supported 5 write-protect client capability supported 6 write-protect host capability supported 7-15 reserved --------E-310500----------------------------- INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION AX = 0500h ES:(E)DI -> buffer for memory information (see #03155) Return: CF clear Notes: 16-bit programs use ES:DI, 32-bit programs use ES:EDI this function must be considered advisory because other applications may affect the results at any time after the call fields not supported by the DPMI implementation are filled with FFFFFFFFh DPMI 1.0+ supports this function solely for backward compatibility; use AX=050Bh instead the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 only returns the first field in the memory information record SeeAlso: AX=0501h,AX=050Bh,AX=0604h Format of DPMI memory information: Offset Size Description (Table 03155) 00h DWORD largest available block in bytes 04h DWORD maximum unlocked page allocation 08h DWORD maximum locked page allocation 0Ch DWORD total linear address space in pages 10h DWORD total unlocked pages 14h DWORD free pages 18h DWORD total physical pages 1Ch DWORD free linear address space in pages 20h DWORD size of paging file/partition in pages 24h 12 BYTEs reserved --------E-310501----------------------------- INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK AX = 0501h BX:CX = size in bytes Return: CF clear if successful BX:CX = linear address of block SI:DI = memory block handle for resizing and freeing block CF set on error AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see #03143) Notes: no selectors are allocated the memory block is allocated unlocked (can be locked with AX=0600h) allocations are often page granular (see AX=0604h) under MS Windows 3.10 Enhanced mode with paging enabled, it is possible for this function to fail even if AX=0500h indicates that enough memory is available SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h SeeAlso: INT 2F/AX=FB42h/BX=0002h --------E-310502----------------------------- INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK AX = 0502h SI:DI = handle of memory block Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8023h) (see #03143) Note: any selectors allocated for the memory block must also be freed, preferably before freeing the memory block SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h --------E-310503----------------------------- INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK AX = 0503h BX:CX = new size in bytes (nonzero) SI:DI = handle of memory block Return: CF clear if successful BX:CX = new linear address SI:DI = new handle of memory block CF set on error AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h) (see #03143) Notes: any selectors pointing at the block must be updated the previous memory block handle becomes invalid an error is returned if the new size is 0 SeeAlso: AX=0102h,AX=0501h,AX=0505h --------E-310504----------------------------- INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK AX = 0504h EBX = page-aligned linear address of memory block (00000000h if any address is acceptable) ECX = size in bytes (nonzero) EDX = flags bit 0: set to create committed pages instead of uncommitted pages bits 1-31 reserved (0) Return: CF clear if successful EBX = linear address of memory block ESI = memory block handle CF set on error AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see #03143) Note: only supported by 32-bit DPMI hosts, but may be used by 16-bit clients SeeAlso: AX=0501h,AX=0505h --------E-310505----------------------------- INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK AX = 0505h ESI = memory block handle ECX = new size in bytes (nonzero) EDX = flags bit 0: create committed pages rather than uncommitted pages bit 1: segment descriptor update required ES:EBX -> buffer containing array of WORDs with selectors EDI = number of selectors in array bits 2-31 reserved (0) Return: CF clear if successful EBX = new linear base address ESI = new memory block handle CF set on error AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see #03143) Notes: only supported by 32-bit DPMI hosts, but may be used by 16-bit clients the old memory block handle becomes invalid if EDX bit 1 set and the block's base address is changed, DPMI updates all descriptors for selectors in the update buffer which fall within the memory block SeeAlso: AX=0503h,AX=0504h --------E-310506----------------------------- INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES AX = 0506h ESI = memory block handle EBX = offset in memory block of first page ECX = number of pages ES:EDX -> array of WORDs to hold page attributes (see #03156) Return: CF clear if successful buffer filled CF set on error AX = error code (8001h,8023h,8025h) (see #03143) Notes: only supported by 32-bit DPMI hosts, but may be used by 16-bit clients if EBX is not page-aligned, it will be rounded down SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h Bitfields for DPMI page attribute word: Bit(s) Description (Table 03156) 0-2 page type 000 uncommitted 001 committed 010 mapped (see AX=0508h,AX=0509h) other currently unused 3 page is read/write rather than read-only 4 accessed/dirty bits supplied in bits 5 and 6 5 page has been accessed (only valid if bit 4 set) 6 page has been written (only valid if bit 4 set) 7-15 reserved (0) --------E-310507----------------------------- INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES AX = 0507h ESI = memory block handle EBX = offset in memory block of first page ECX = number of pages ES:EDX -> array of WORDs with new page attributes (see #03156) Return: CF clear if successful CF set on error AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h) (see #03143) ECX = number of pages which have been set Notes: only supported by 32-bit DPMI hosts, but may be used by 16-bit clients if EBX is not page-aligned, it will be rounded down SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh --------E-310508----------------------------- INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK AX = 0508h ESI = memory block handle EBX = page-aligned offset within memory block of page(s) to be mapped ECX = number of pages to map EDX = page-aligned physical address of device Return: CF clear if successful CF set on error AX = error code (8001h,8003h,8023h,8025h) (see #03143) Notes: only supported by 32-bit DPMI hosts, but may be used by 16-bit clients support of this function is optional; hosts are also allowed to support the function for some devices but not others SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h --------E-310509----------------------------- INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK AX = 0509h ESI = memory block handle EBX = page-aligned offset within memory block of page(s) to map ECX = number of pages to map EDX = page-aligned linear address of conventional (below 1M) memory Return: CF clear if successful CF set on error AX = error code (8001h,8003h,8023h,8025h) (see #03143) Notes: only supported by 32-bit DPMI hosts, but may be used by 16-bit clients support of this function is optional SeeAlso: AX=0504h,AX=0508h,AX=0801h --------E-31050A----------------------------- INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE AX = 050Ah SI:DI = memory block handle Return: CF clear if successful SI:DI = size in bytes BX:CX = base address CF set on error AX = error code (8023h) (see #03143) SeeAlso: AX=0501h,AX=0504h --------E-31050B----------------------------- INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION AX = 050Bh ES:(E)DI -> 128-byte buffer for memory information (see #03157) Return: CF clear if successful CF set on error (DPMI 0.9 only) Note: 16-bit programs use ES:DI, 32-bit programs must use ES:EDI SeeAlso: AX=0500h Format of DPMI memory information: Offset Size Description (Table 03157) 00h DWORD total allocated bytes of physical memory controlled by host 04h DWORD total allocated bytes of virtual memory controlled by host 08h DWORD total available bytes of virtual memory controlled by host 0Ch DWORD total allocated bytes of virtual memory for curr virtual mach 10h DWORD total available bytes of virtual memory for curr virtual mach 14h DWORD total allocated bytes of virtual memory for current client 18h DWORD total available bytes of virtual memory for current client 1Ch DWORD total locked bytes for current client 20h DWORD maximum locked bytes for current client 24h DWORD highest linear address available to current client 28h DWORD largest available memory block in bytes 2Ch DWORD minimum allocation unit in bytes 30h DWORD allocation alignment unit size in bytes 34h 76 BYTEs reserved (00h) --------E-310600----------------------------- INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION AX = 0600h BX:CX = starting linear address SI:DI = size of region in bytes Return: CF clear if successful CF set on error none of the memory is locked AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see #03143) Notes: pages at beginning and end will be locked if the region overlaps them may be called multiple times for a given page; the DPMI host keeps a lock count for each page SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h --------E-310601----------------------------- INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION AX = 0601h BX:CX = starting linear address SI:DI = size of region in bytes Return: CF clear if successful CF set on error none of the memory is unlocked AX = error code (DPMI 1.0+) (8002h,8025h) (see #03143) Notes: pages at beginning and end will be unlocked if the region overlaps them memory whose lock count has not reached zero remains locked SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h --------E-310602----------------------------- INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE AX = 0602h BX:CX = starting linear address SI:DI = size of region in bytes Return: CF clear if successful CF set on error none of the memory is made pageable AX = error code (DPMI 1.0+) (8002h,8025h) (see #03143) Notes: must relock all unlocked real mode memory before terminating process for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory pages at beginning and end will be unlocked if the region overlaps them pageability of real mode pages is binary, not a count SeeAlso: AX=0600h,AX=0603h --------E-310603----------------------------- INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION AX = 0603h BX:CX = starting linear address SI:DI = size of region in bytes Return: CF clear if successful CF set on error none of the memory is relocked AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see #03143) Notes: pages at beginning and end will be relocked if the region overlaps them pageability of real mode pages is binary, not a count SeeAlso: AX=0602h --------E-310604----------------------------- INT 31 P - DPMI 0.9+ - GET PAGE SIZE AX = 0604h Return: CF clear if successful BX:CX = page size in bytes CF set on error AX = error code (DPMI 1.0+) (see also #03143) 8001h unsupported, 16-bit host BUG: the Borland C++ 3.1 DPMILOAD returns with CF clear but BX and CX unchanged --------E-310700----------------------------- INT 31 Pu - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES AX = 0700h BX:CX = starting linear page number SI:DI = number of pages to mark as paging candidates Return: ??? Note: although marked as reserved in versions 0.9 and 1.0 of the DPMI specification, this function is called by MS Windows TASKMAN, PROGMAN, and KERNEL SeeAlso: AX=0701h,AX=0702h --------E-310701----------------------------- INT 31 Pu - DPMI 0.9+ - DISCARD PAGES AX = 0701h BX:CX = starting linear page number SI:DI = number of pages to discard Return: ??? Note: although marked as reserved in versions 0.9 and 1.0 of the DPMI specification, this function is called by MS Windows TASKMAN, PROGMAN, and KERNEL SeeAlso: AX=0700h,AX=0703h --------E-310702----------------------------- INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE AX = 0702h BX:CX = starting linear address SI:DI = number of bytes to mark as paging candidates Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8025h) (see #03143) Notes: this function is advisory, and does not force immediate paging partial pages will not be discarded SeeAlso: AX=0700h,AX=0703h --------E-310703----------------------------- INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS AX = 0703h BX:CX = starting linear address SI:DI = number of bytes to mark as discarded Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8025h) (see #03143) Notes: this function is advisory, and may be ignored by DPMI implementations partial pages will not be discarded SeeAlso: AX=0701h,AX=0702h --------E-310800----------------------------- INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING AX = 0800h BX:CX = physical address (should be above 1 MB) SI:DI = size in bytes Return: CF clear if successful BX:CX = linear address which maps the requested physical memory CF set on error AX = error code (DPMI 1.0+) (8003h,8021h) (see #03143) Notes: implementations may refuse this call because it can circumvent protects the caller must build an appropriate selector for the memory do not use for memory mapped in the first megabyte SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h --------E-310801----------------------------- INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING AX = 0801h BX:CX = linear address returned by AX=0800h Return: CF clear if successful CF set on error AX = error code (8025h) (see #03143) Note: should be called at end of access to device mapped with AX=0800h SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h --------E-310900----------------------------- INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE AX = 0900h Return: CF clear virtual interrupts disabled AL = previous interrupt state (00h disabled, 01h enabled) AH preserved Notes: the previous state may be restored simply by executing another INT 31 a CLI instruction may be used if the previous state is unimportant, but should be assumed to be very slow due to trapping by the host SeeAlso: AX=0901h,AX=0902h --------E-310901----------------------------- INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE AX = 0901h Return: CF clear virtual interrupts enabled AL = previous interrupt state (00h disabled, 01h enabled) AH preserved Notes: the previous state may be restored simply by executing another INT 31 a STI instruction may be used if the previous state is unimportant, but should be assumed to be very slow due to trapping by the host SeeAlso: AX=0900h,AX=0902h --------E-310902----------------------------- INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE AX = 0902h Return: CF clear AL = current interrupt state (00h disabled, 01h enabled) Note: should be used rather than PUSHF because that instruction yields the physical interrupt state rather than the per-client virtualized interrupt flag SeeAlso: AX=0900h,AX=0901h --------E-310A00----------------------------- INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT AX = 0A00h DS:(E)SI -> case-sensitive ASCIZ vendor name or identifier Return: CF clear if successful ES:(E)DI -> FAR extended API entry point DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed CF set on error AX = error code (DPMI 1.0+) (8001h) (see #03143) Notes: extended API parameters are vendor-specific DPMI 1.0+ supports this function solely for backward compatibility; use INT 2F/AX=168Ah instead this function is not supported by MS Windows 3.10, BC++ 3.1 DPMILOAD, or QDPMI v1.0x; use INT 2F/AX=168Ah instead. It is supported by 386MAX v7.01. SeeAlso: INT 2F/AX=168Ah --------E-310B00----------------------------- INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT AX = 0B00h BX:CX = linear address DL = size (1,2,4 bytes) DH = type (00h execute, 01h write, 02h read/write) Return: CF clear if successful BX = watchpoint handle CF set on error AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see #03143) SeeAlso: AX=0212h,AX=0601h --------E-310B01----------------------------- INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT AX = 0B01h BX = watchpoint handle Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8023h) (see #03143) Note: the watchpoint handle is freed SeeAlso: AX=0B00h --------E-310B02----------------------------- INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT AX = 0B02h BX = watchpoint handle Return: CF clear if successful AX = status flags bit 0: watch point has been executed since AX=0B00h or AX=0B03h CF set on error AX = error code (DPMI 1.0+) (8023h) (see #03143) SeeAlso: AX=0B00h,AX=0B03h --------E-310B03----------------------------- INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT AX = 0B03h BX = watchpoint handle Return: CF clear if successful CF set on error AX = error code (DPMI 1.0+) (8023h) (see #03143) SeeAlso: AX=0B02h --------E-310C00----------------------------- INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK AX = 0C00h ES:(E)DI -> resident service provider structure (see #03158) Return: CF clear if successful CF set on error AX = error code (8015h,8021h,8025h) (see #03143 at AX=0000h) Note: calling this function declares an intent to provide resident protected mode services after terminating with AX=0C01h SeeAlso: AX=0303h,AX=0C01h Format of DPMI resident service provider structure: Offset Size Description (Table 03158) 00h QWORD descriptor for 16-bit data segment 08h QWORD descriptor for 16-bit code segment (zeros if not supported) 10h WORD offset of 16-bit callback procedure 12h 2 BYTEs reserved 14h QWORD descriptor for 32-bit data segment 1Ch QWORD descriptor for 32-bit code segment (zeros if not supported) 24h DWORD offset of 32-bit callback procedure --------E-310C01----------------------------- INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT AX = 0C01h BL = return code DX = number of paragraphs of DOS memory to reserve (0 or >= 6) Return: never Notes: should only be used if the program will only provide services to other DPMI programs any protected mode memory remains allocated to the program unless explicitly freed before this call must first call AX=0C00h or program will simply be terminated SeeAlso: AX=0C00h,INT 21/AH=31h --------E-310D00----------------------------- INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY AX = 0D00h ES:(E)DI -> shared memory allocation request structure (see #03159) Return: CF clear if successful request structure updated CF set on error AX = error code (8012h,8013h,8014h,8016h,8021h) (see #03143) Note: first 16 bytes of memory block will be initialized to zeros on the first allocation SeeAlso: AX=0501h,AX=0D01h,AX=0D02h Format of DPMI shared memory allocation request structure: Offset Size Description (Table 03159) 00h DWORD requested length of shared memory block in bytes 04h DWORD (ret) allocated length of block 08h DWORD (ret) shared memory handle 0Ch DWORD (ret) linear address of memory block 10h PWORD selector:offset32 of ASCIZ name for memory block (name max 128 bytes) 16h 2 BYTEs reserved 18h 4 BYTEs reserved (00h) --------E-310D01----------------------------- INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY AX = 0D01h SI:DI = shared memory block handle Return: CF clear if successful CF set on error AX = error code (8023h) (see #03143) Notes: handle becomes invalid after this call DPMI maintains separate global and virtual machine use counts for each shared memory block; when the global use counts reaches zero, the block is finally destroyed SeeAlso: AX=0502h,AX=0D00h --------E-310D02----------------------------- INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY AX = 0D02h SI:DI = shared memory block handle DX = flags bit 0: return immediately rather than suspending if serialization unavailable bit 1: shared rather than exclusive serialization bits 2-15 reserved (0) Return: CF clear if successful CF set on error AX = error code (8004h,8005h,8017h-8019h,8023h) (see #03143) Notes: an exclusive serialization blocks any other serialization attempts for the same block by another virtual machine; a shared serialization blocks attempts at exclusive serialization by another virtual machine hosts are not required to detect deadlock a client's interrupt handler can cancel a serialization call which caused it to block by calling AX=0D03h SeeAlso: AX=0D00h,AX=0D03h --------E-310D03----------------------------- INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY AX = 0D03h SI:DI = shared memory block handle DX = flags bit 0: release shared serialization rather than exclusive serialztn bit 1: free pending serialization bits 2-15 reserved (0) Return: CF clear if successful CF set on error AX = error code (8002h,8023h) (see #03143 at AX=0000h) SeeAlso: AX=0D00h,AX=0D02h --------E-310E00----------------------------- INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS AX = 0E00h Return: CF clear AX = coprocessor status (see #03160) Note: supported by 386MAX v6.01, which otherwise only supports DPMI 0.9 SeeAlso: AX=0E01h Bitfields for DPMI coprocessor status: Bit(s) Description (Table 03160) 0 numeric coprocessor enabled for current client 1 client is emulating coprocessor 2 numeric coprocessor is present 3 host is emulating coprocessor instructions 4-7 coprocessor type 0000 none 0010 80287 0011 80387 0100 80486 with numeric coprocessor other reserved 8-15 not used --------E-310E01----------------------------- INT 31 P - DPMI 1.0+ - SET EMULATION AX = 0E01h BX = coprocessor flag bits (see #03161) Return: CF clear if successful CF set on error AX = error code (8026h) (see #03143 at AX=0000h) Note: supported by 386MAX v6.01, which otherwise only supports DPMI 0.9 SeeAlso: AX=0E00h Bitfields for DPMI coprocessor flags: Bit(s) Description (Table 03161) 0 enable numeric coprocessor for current client 1 client will emulate coprocessor 2-15 not used --------E-3157------------------------------- INT 31 - Netroom3 DPMI.EXE v3.00 - ??? AH = 57h AL = subfunction (at least 02h,03h,04h,05h,07h,08h,09h,0Ah) ??? Return: ??? SeeAlso: INT 2C/AX=0000h"Cloaking" --------E-315702----------------------------- INT 31 - Netroom3 DPMI.EXE v3.00 - SWITCH TO PROTECTED MODE AX = 5702h DX = PSP segment of caller STACK: WORD ??? WORD flags (bit 0 set if 32-bit program) Return: as for DPMI mode-switch entry point (see #02718 at INT 2F/AX=1687h) Note: this function is called by the real-mode DPMI mode-switch entry point SeeAlso: INT 2F/AX=1687h --------E-31EE00------------------------ INT 31 - DOS32 v3.0+ - GET DOS32 VERSION AND SELECTOR VALUES AX = EE00h Return: AL = minor version (BCD) AH = major version (BCD) DL = system type (1=raw DOS, 2=XMS, 4=VCPI, 8=DPMI) BX = selector of 4GB data segment with zero base address Program: DOS32 is a 32 bit DOS extender by Adam Seychell. SeeAlso: AX=EE02h --------E-31EE02------------------------ INT 31 - DOS32 v3.0+ - GET DOS32 ADDRESS INFORMATION AX = EE02h Return: AX = real-mode segment of temporary 8K buffer (v3.1+) EBX = 32bit linear address of the program segment EDX = Total size in bytes of the programs .EXE file after linking. ESI = offset address of PSP EDI = offset address of program environment ECX = offset address of the program's .EXE ASCIZ file name and path SeeAlso: AX=EE00h,AX=EE20h --------E-31EE10------------------------ INT 31 - DOS32 v3.2+ - SET UP A DOS32 LOADABLE LIBRARY AX = EE10h EDX -> library ASCIZ path\filename EBX = number of bytes to seek from beginning of file Return: CF clear if successful EAX = size of memory block required to store library EBX = size of library file CF set on error AL = error code. 01h error opening or reading file 02h bad DOS32 library file SeeAlso: AX=EE00h,AX=EE11h --------E-31EE11------------------------ INT 31 - DOS32 v3.2+ - LOAD LIBRARY FILE AX = EE11h EDX -> near pointer of memory block to store library Return: CF clear if successful EDX = near pointer to the dynamic library public CF set on error Note: must first successfuly call function AX=EE10h before calling this function SeeAlso: AX=EE00h,AX=EE10h --------E-31EE20------------------------ INT 31 - DOS32 v3.0+ - GET REAL MODE CALL BACK ADDRESS WITH RETF STACK FRAME AX = EE20h ESI = offset of the real mode call back function Return: CF clear if successful CX:DX = real mode address to call up to the protected mode procedure CF set on error SeeAlso: AX=EE00h,AX=EE02h,AX=EE21h --------E-31EE21------------------------ INT 31 - DOS32 v3.0+ - GET REAL MODE CALL BACK ADDRESS WITH IRET STACK FRAME AX = EE21h ESI = offset of the real mode call back function Return: CF clear if successful CX:DX = real mode address to call up to the protected mode procedure CF set on error SeeAlso: AX=EE20h --------E-31EE30------------------------ INT 31 - DOS32 v3.0+ - TERMINATE AND STAY RESIDENT AX = EE30h SeeAlso: AX=EE21h,AX=EE40h,INT 21/AH=31h --------E-31EE40------------------------ INT 31 - DOS32 v3.0+ - UNDO PREVIOUS MEMORY ALLOCATION or DMA BUFFER AX = EE40h Return: CF clear if successful CF set on error SeeAlso: AX=EE41h,AX=EE42h --------E-31EE41------------------------ INT 31 - DOS32 v3.0+ - ALLOCATE 16KB DMA BLOCK AX = EE41h Return: CF clear if successful EBX -> 16KB DMA block (physical address) EDX -> 16KB DMA block (offset address) CF set on error SeeAlso: AX=EE40h,AX=EE42h --------E-31EE42------------------------ INT 31 - DOS32 v3.0+ - ALLOCATE MEMORY BLOCK AX = EE42h EDX = size in bytes Return: CF clear if successful EAX = size in bytes EDX -> memory block CF set on error Note: size is rounded off to the next 4KB boundary SeeAlso: AX=EE40h,AX=EE41h --------E-31FF00----------------------------- INT 31 P - CauseWay - "Info" - GET SYSTEM SELECTORS/FLAGS AX = FF00h Return: AX = selector for flag address space (base 00000000h, limit 4GB) BX = selector for current PSP segment (limit 0100h) (E)CX = size of DOS transfer buffer (max 64K) DX = real-mode segment address of DOS transfer buffer ES:(E)SI = protected-mode address of DOS transfer buffer EDI = system flags (see #03162) Program: CauseWay is a 386 DOS extender by Michael Devore and John Wildsmith for use with Watcom C++ or assembly language programs Notes: the entire transfer buffer can be addressed with a 16-bit offset in protected mode CauseWay always maps selector 0040h to the BIOS data segment at real-mode segment 0040h; when not running under a DPMI host, CauseWay also provides selectors A000h, B000h, and B800h mapped to video memory SeeAlso: AX=FF25h Bitfields for CauseWay system flags: Bit(s) Description (Table 03162) 0 32-bit code 1 virtual memory manage enabled 3-2 mode: 00 raw extended memory, 01 VCPI, 10 DPMI 4 DPMI available 5 VCPI available 6 no memory managers 7 application descriptor table type: 0 = GDT, 1 = LDT 14-8 reserved 15 debugging engine present --------E-31FF01----------------------------- INT 31 P - CauseWay - "IntXX" - SIMULATE REAL-MODE INTERRUPT AX = FF01h BL = interrupt number ES:(E)DI -> real-mode register list (see #03148 at AX=0300h) Return: register list updated Note: CauseWay fills in the values for SS, SP, and FLAGS itself, and ignores the values specified for CS and IP SeeAlso: AX=0300h,AX=FF02h --------E-31FF02----------------------------- INT 31 P - CauseWay - "FarCallReal" - SIMULATE REAL-MODE FAR CALL AX = FF02h ES:(E)DI -> real-mode register list (see #03148 at AX=0300h) Return: register list updated SeeAlso: AX=0301h,AX=FF01h --------E-31FF03----------------------------- INT 31 P - CauseWay - "GetSel" - ALLOCATE NEW SELECTOR AX = FF03h Return: CF clear if successful BX = new selector CF set on error Note: the new selector is initialized with a base address of 000000h, a limit of 0000h, and attributes read/write expand-up data SeeAlso: AX=FF04h,AX=FF05h,AX=FF06h --------E-31FF04----------------------------- INT 31 P - CauseWay - "RelSel" - RELEASE A SELECTOR AX = FF04h BX = selector Return: CF clear if successful CF set on error SeeAlso: AX=FF03h,AX=FF06h --------E-31FF05----------------------------- INT 31 P - CauseWay - "CodeSel" - CONVERT SELECTOR TO EXECUTABLE CODE SELECTOR AX = FF05h BX = selector CL = default operation size (00h = 16-bit, 01h = 32-bit) Return: CF clear if successful CF set on error SeeAlso: AX=FF03h --------E-31FF06----------------------------- INT 31 P - CauseWay - "AliasSel" - CREATE READ/WRITE DATA ALIAS SELECTOR AX = FF06h BX = original selector Return: CF clear if successful AX = new data selector aliasing original selector CF set on error SeeAlso: AX=FF03h,AX=FF04h --------E-31FF07----------------------------- INT 31 P - CauseWay - "GetSelDet" - GET SELECTOR BASE AND LIMIT AX = FF07h BX = selector Return: CF clear if successful CX:DX = base address SI:DI = limit (bytes) CF set on error SeeAlso: AX=FF08h,AX=FF09h --------E-31FF08----------------------------- INT 31 P - CauseWay - "GetSelDet32" - GET SELECTOR BASE AND LIMIT (32-bit) AX = FF08h Return: CF clear if successful EDX = base address ECX = limit (bytes) CF set on error SeeAlso: AX=FF07h,AX=FF0Ah --------E-31FF09----------------------------- INT 31 P - CauseWay - "SetSelDet" - SET SELECTOR BASE AND LIMIT AX = FF09h BX = selector CX:DX = new base address SI:DI = new byte-granular limit Return: CF clear if successful CF set on error SeeAlso: AX=FF07h,AX=FF0Ah --------E-31FF0A----------------------------- INT 31 P - CauseWay - "SetSelDet32" - SET SELECTOR BASE AND LIMIT (32-bit) AX = FF0Ah BX = selector EDX = new base address ECX = new byte-granular limit Return: CF clear if successful CF set on error SeeAlso: AX=FF08h,AX=FF09h --------E-31FF0B----------------------------- INT 31 P - CauseWay - "GetMem" - ALLOCATE BLOCK OF MEMORY AX = FF0Bh CX:DX = size in bytes (FFFFh:FFFFh to get size of largest available) Return: CF clear if successful BX = selector for accessing block if requested size not FFFFh:FFFFh CX:DX = size of largest available block if requested FFFFh:FFFFh CF set on error SeeAlso: AX=FF0Ch,AX=FF0Dh,AX=FF0Fh,AX=FF10h,AX=FF2Ch --------E-31FF0C----------------------------- INT 31 P - CauseWay - "GetMem32" - ALLOCATE BLOCK OF MEMORY (32-bit) AX = FF0Ch ECX = size in bytes (FFFFFFFFh to get size of largest available block) Return: CF clear if successful BX = selector for accessing block if requested size not FFFFh:FFFFh ECX = size of largest available block if requested FFFFh:FFFFh CF set on error SeeAlso: AX=FF0Bh,AX=FF0Eh,AX=FF0Fh,AX=FF11h --------E-31FF0D----------------------------- INT 31 P - CauseWay - "ResMem" - RESIZE MEMORY BLOCK AX = FF0Dh BX = selector for block to be resized CX:DX = new size in bytes Return: CF clear if successful CF set on error Note: the memory block may have to be copied to another location in order to satisfy the requested new size, in which case the base address of the selector is updated SeeAlso: AX=FF0Bh,AX=FF0Eh,AX=FF12h --------E-31FF0E----------------------------- INT 31 P - CauseWay - "ResMem32" - RESIZE MEMORY BLOCK (32-bit) AX = FF0Eh BX = selector for block to be resized ECX = new size in bytes Return: CF clear if successful CF set on error Note: the memory block may have to be copied to another location in order to satisfy the requested new size, in which case the base address of the selector is updated SeeAlso: AX=FF0Ch,AX=FF0Dh,AX=FF13h --------E-31FF0F----------------------------- INT 31 P - CauseWay - "RelMem" - RELEASE PREVIOUSLY ALLOCATED MEMORY AX = FF0Fh BX = selector for block to be released Return: CF clear if successful CF set on error SeeAlso: AX=FF0Bh,AX=FF0Ch,AX=FF14h --------E-31FF10----------------------------- INT 31 P - CauseWay - "GetMemLinear" - ALLOCATE MEMORY WITHOUT SELECTOR AX = FF10h CX:DX = size of block in bytes Return: CF clear if successful SI:DI = linear address of allocated block CF set on error Note: this function may return addresses above 16M SeeAlso: AX=FF0Bh,AX=FF11h,AX=FF12h,AX=FF14h --------E-31FF11----------------------------- INT 31 P - CauseWay - "GetMemLinear32" - ALLOCATE MEMORY WITHOUT SELECTOR AX = FF11h ECX = size of block in bytes Return: CF clear if successful ESI = linear address of allocated block CF set on error Note: this function may return addresses above 16M SeeAlso: AX=FF0Ch,AX=FF10h,AX=FF13h,AX=FF14h --------E-31FF12----------------------------- INT 31 P - CauseWay - "ResMemLinear" - RESIZE LINEAR MEMORY BLOCK AX = FF12h CX:DX = new size in bytes SI:DI = linear address of block to be resized Return: CF clear if successful SI:DI = new linear address of block CF set on error SeeAlso: AX=FF0Dh,AX=FF10h,AX=FF13h --------E-31FF13----------------------------- INT 31 P - CauseWay - "ResMemLinear32" - RESIZE LINEAR MEMORY BLOCK (32-bit) AX = FF13h ECX = new size in bytes ESI = linear address of block to be resized Return: CF clear if successful ESI = new linear address of block CF set on error SeeAlso: AX=FF0Eh,AX=FF11h,AX=FF12h --------E-31FF14----------------------------- INT 31 P - CauseWay - "RelMemLinear" - RELEASE LINEAR MEMORY BLOCK AX = FF14h SI:DI = linear address of block to be released Return: CF clear if successful CF set on error SeeAlso: AX=FF0Fh,AX=FF10h,AX=FF15h --------E-31FF15----------------------------- INT 31 P - CauseWay - "RelMemLinear32" - RELEASE LINEAR MEMORY BLOCK (32-bit) AX = FF15h ESI = linear address of block to be released Return: CF clear if successful CF set on error SeeAlso: AX=FF0Fh,AX=FF11h,AX=FF15h --------E-31FF16----------------------------- INT 31 P - CauseWay - "GetMemNear" - ALLOCATE APPLICATION-RELATIVE MEMORY AX = FF16h EBX = size in bytes of block to allocate Return: CF clear if successful ESI = application-relative linear address of allocated block CF set on error SeeAlso: AX=FF17h,AX=FF18h,AX=FF19h --------E-31FF17----------------------------- INT 31 P - CauseWay - "ResMemNear" - RESIZE APPLICATION-RELATIVE MEMORY BLOCK AX = FF17h EBX = size in bytes of block to allocate ESI = application-relative linear address of block Return: CF clear if successful ESI = new application-relative linear address of block CF set on error SeeAlso: AX=FF16h,AX=FF18h,AX=FF19h --------E-31FF18----------------------------- INT 31 P - CauseWay - "RelMemNear" - RELEASE APPLICATION-RELATIVE MEMORY BLOCK AX = FF18h ESI = application-relative linear address of block Return: CF clear if successful CF set on error SeeAlso: AX=FF16h,AX=FF17h,AX=FF19h --------E-31FF19----------------------------- INT 31 P - CauseWay - "Linear2Near" - CONVERT LINEAR TO APP-RELATIVE ADDRESS AX = FF19h ESI = linear address Return: ESI = application-relative linear address SeeAlso: AX=FF1Ah --------E-31FF1A----------------------------- INT 31 P - CauseWay - "Near2Linear" - CONVERT APP-RELATIVE TO LINEAR ADDRESS AX = FF1Ah ESI = application-relative linear address Return: ESI = linear address SeeAlso: AX=FF19h --------E-31FF1B----------------------------- INT 31 P - CauseWay - "LockMem" - LOCK REGION OF MEMORY AX = FF1Bh BX:CX = starting linear address SI:DI = size of region in bytes Return: CF clear if successful CF set on error Desc: prevent memory from being swapped out by the virtual memory manager Note: locks are applied on 4K page boundaries, so memory above and below the specified region may be locked as well SeeAlso: AX=FF1Ch,AX=FF1Dh --------E-31FF1C----------------------------- INT 31 P - CauseWay - "LockMem32" - LOCK REGION OF MEMORY (32-bit) AX = FF1Ch ESI = starting linear address ECX = size of region in bytes Return: CF clear if successful CF set on error Desc: prevent memory from being swapped out by the virtual memory manager Note: locks are applied on 4K page boundaries, so memory above and below the specified region may be locked as well SeeAlso: AX=FF1Bh,AX=FF1Eh,AX=FF1Fh --------E-31FF1D----------------------------- INT 31 P - CauseWay - "UnLockMem" - UNLOCK REGION OF MEMORY AX = FF1Dh BX:CX = starting linear address SI:DI = size of region in bytes Return: CF clear if successful CF set on error Desc: allow memory to be swapped out by the virtual memory manager Note: locks are applied on 4K page boundaries, so memory above and below the specified region may be unlocked as well SeeAlso: AX=FF1Bh,AX=FF1Eh --------E-31FF1E----------------------------- INT 31 P - CauseWay - "UnLockMem32" - UNLOCK REGION OF MEMORY (32-bit) AX = FF1Eh ESI = starting linear address ECX = size of region in bytes Return: CF clear if successful CF set on error Desc: allow memory to be swapped out by the virtual memory manager Note: locks are applied on 4K page boundaries, so memory above and below the specified region may be unlocked as well SeeAlso: AX=FF1Ch,AX=FF1Dh,AX=FF20h --------E-31FF1F----------------------------- INT 31 P - CauseWay - "LockMemNear" - LOCK APPLICATION-RELATIVE MEMORY REGION AX = FF1Fh ESI = starting application-relative linear address EBX = size of region in bytes Return: CF clear if successful CF set on error Desc: prevent memory from being swapped out by the virtual memory manager Note: locks are applied on 4K page boundaries, so memory above and below the specified region may be locked as well SeeAlso: AX=FF1Ch,AX=FF20h --------E-31FF20----------------------------- INT 31 P - CauseWay - "UnLockMemNear" - UNLOCK APP-RELATIVE MEMORY REGION AX = FF20h ESI = starting application-relative linear address ECX = size of region in bytes Return: CF clear if successful CF set on error Desc: allow memory to be swapped out by the virtual memory manager Note: locks are applied on 4K page boundaries, so memory above and below the specified region may be unlocked as well SeeAlso: AX=FF1Eh,AX=FF1Fh --------E-31FF21----------------------------- INT 31 P - CauseWay - "GetMemDOS" - ALLOCATE CONVENTIONAL MEMORY AX = FF21h BX = number of paragraphs to allocate Return: CF clear if successful AX = real-mode segment of allocated block DX = initial selector for block CF set on error AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h) BX = size of largest available block Note: if the requested size is greater than 64K, contiguous selectors will be allocated, one for each 64K; for 32-bit applications, the first selector's limit will be set to the size of the entire block, while that selector will have a limit of 64K for 16-bit applications. All selectors after the first one have a limit of 64K except the final one SeeAlso: AX=FF22h,AX=FF23h,INT 21/AH=48h --------E-31FF22----------------------------- INT 31 P - CauseWay - "ResMemDOS" - RESIZE CONVENTIONAL MEMORY BLOCK AX = FF22h BX = new size in paragraphs DX = initial selector for block Return: CF clear if successful CF set on error AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h) BX = maximum number of paragraphs available Note: this function will also fail if the block is expanded past a 64K boundary and the next selector is already in use SeeAlso: AX=FF21h,AX=FF23h,INT 21/AH=49h --------E-31FF23----------------------------- INT 31 P - CauseWay - "RelMemDOS" - RELEASE CONVENTIONAL MEMORY BLOCK AX = FF23h DX = initial selector for block Return: CF clear if successful CF set on error AX = DOS error code (see #01680 at INT 21/AH=59h/BX=0000h) Note: all descriptors allocated for the block are freed SeeAlso: AX=FF21h,AX=FF22h,INT 21/AH=4Ah --------E-31FF24----------------------------- INT 31 P - CauseWay - "ExecOverlay" - LOAD AND OPTIONALLY EXECUTE APP CODE AX = FF24h EBX = flags bit 0: don't execute (overlay only) bit 1: don't preserve relocation information ES:EDX -> filename (see also #03163) FS:ESI -> commandline (ESI = 00000000h if no commandline) GS:EDI -> name (CW's /o option) Return: CF clear if successful ---EBX bit 0 set--- CX:EDX = program entry point (CS:EIP) SI = segment of PSP ---EBX bit 1 set--- BX:EAX = initial SS:ESP EDI high word = base segment EDI low word = number of segments EBP = start of segment definitions CF set on error AX = error code 0001h DOS file access error 0002h not a CuaseWay 3P file 0003h not enough memory SeeAlso: AX=FF2Ah,INT 21/AH=4Bh Format of CauseWay executable: Offset Size Description (Table 03163) 00h 2 BYTEs signature "3P" 02h DWORD size of header data in bytes 06h DWORD size of EXE image data in bytes 0Ah DWORD number of bytes of program memory required 0Eh WORD number of segment definitions (see #03165) 10h DWORD number of relocation table entries 14h DWORD offset of program entry point 18h WORD segment list entry number for entry point's CS 1Ah DWORD initial ESP 1Eh WORD segment list entry number for initial SS 20h DWORD control flags (see #03164) 24h DWORD automatic stack size in bytes if ESP entry = 00000000h 28h BYTE length of name (name follows program image) 29h 23 BYTEs reserved SeeAlso: #01594,#01609 at INT 21/AH=4Bh Bitfields for CauseWay executable control flags: Bit(s) Description (Table 03164) 0 16-bit interrupt stack frame 7 descriptor table type (0 = GDT, 1 = LDT) 14 16-bit default data size 31 compressed EXE image Note: bits 0 and 14 should always be equal SeeAlso: #03163 Format of CauseWay segment definition [array]: Offset Size Description (Table 03165) 00h DWORD start offset within program image 04h DWORD length and type bits 0-19: length bit 20: granularity (if set, length is in 4K pages) bits 21-24: type 0000 code 0001 read/write data 0010 stack 0011 read-only data bit 25: force segment descriptor's D bit to 0 bit 26: force segmetn descriptor's D bit to 1 SeeAlso: #03163 --------E-31FF25----------------------------- INT 31 P - CauseWay - "GetDOSTrans" - GET DOS TRANSFER BUFFER AX = FF25h Return: BX = real-mode segment of transfer buffer ECX = transfer buffer size DX = protected-mode selector for transfer buffer Note: the default buffer size of 8K is sufficient for most applications, but an application performing large amounts of file I/O may benefit from allocating its own, larger buffer SeeAlso: AX=FF00h,AX=FF26h --------E-31FF26----------------------------- INT 31 P - CauseWay - "SetDOSTrans" - SET DOS TRANSFER BUFFER AX = FF26h BX = real-mode segment of new transfer buffer ECX = new transfer buffer size DX = protected-mode selector for new transfer buffer Return: nothing Note: the specific buffer must be located in conventional memory; only the first 64K will be used SeeAlso: AX=FF25h --------E-31FF27----------------------------- INT 31 P - CauseWay v1.3 - "GetMCBSize" - GET CURRENT MCB ALLOCATION BLOCK SIZE AX = FF27h Return: ECX = current threshold Desc: determine the memory allocation size below which CauseWay will use internal MCB chains rather than allocating full 4K pages via DPMI SeeAlso: AX=FF00h,AX=FF28h --------E-31FF28----------------------------- INT 31 P - CauseWay v1.3 - "SetMCBSize" - SET MCB MEMORY ALLOCATION BLOCK SIZE AX = FF28h ECX = new threshold (0000000h to disable MCB memory allocation system) Return: CF clear if successful threshold unchanged (default 16K) CF set on error (threshold > 64K) Desc: specify the memory allocation size below which CauseWay will use internal MCB chains rather than allocating full 4K pages via DPMI Note: the specified threshold will be rounded up to the next higher multiple of 4K SeeAlso: AX=FF00h,AX=FF27h --------E-31FF29----------------------------- INT 31 P - CauseWay v1.3 - "GetSels" - ALLOCATE MULTIPLE SELECTORS AX = FF29h CX = number of selectors to allocate Return: BX = base selector Desc: allocate multiple contiguous selectors, initializing each to have a base address and limit of zero SeeAlso: AX=FF00h,AX=FF04h --------E-31FF2A----------------------------- INT 31 P - CauseWay v1.3 - "cwLoad" - LOAD ANOTHER CAUSEWAY PROGRAM AS OVERLAY AX = FF2Ah DS:EDX -> filename Return: CF clear if successful CX:EDX = CS:EIP of entry point BX:EAX = initial SS:ESP for program SI = PSP for overlay program CF set on error AX = error code (01h file error, 02h not a 3P file, 03h no memory) Note: the returned PSP can be given to "RelMem" (AX=FF0Fh) to release the overlay's memory and selectors; only selectors and memory allocated during loading will be freed by RelMem unless one switches PSPs with INT 21/AH=50h SeeAlso: AX=FF00h,AX=FF24h --------E-31FF2B----------------------------- INT 31 P - CauseWay v1.3 - "cwcInfo" - VALIDATE AND GET SIZE OF CWC FILE AX = FF2Bh BX = file handle for CWC-compressed file Return: CF clear if successful ECX = expanded file size CF set on error (not a CWC-compressed file) SeeAlso: AX=FF00h,AX=FFFBh --------E-31FF2C----------------------------- INT 31 P - CauseWay v1.3 - "GetMemSO" - ALLOCATE MEMORY AND RETURN SEL:OFFSET AX = FF2Ch CX:DX = block size in bytes Return: CF clear if successful SI:DI = selector:offset of allocated memory CF set on error Note: unlike "GetMem" (AX=FF0Bh), this function will reuse selectors until a segment is full, rather than allocating a new selector for each memory block SeeAlso: AX=FF00h,AX=FF2Dh,AX=FF2Eh --------E-31FF2D----------------------------- INT 31 P - CauseWay v1.3 - "ResMemSO" - RESIZE SELECTOR:OFFSET MEMORY BLOCK AX = FF2Dh SI:DI = selector:offset for memory block CX:DX = new size of block Return: CF clear if successful SI:DI = new selector:offset for memory block CF set on error SeeAlso: AX=FF00h,AX=FF2Ch,AX=FF2Eh --------E-31FF2E----------------------------- INT 31 P - CauseWay v1.3 - "RelMemSO" - RELEASE SELECTOR:OFFSET MEMORY BLOCK AX = FF2Eh SI:DI = selector:offset for memory block SeeAlso: AX=FF00h --------E-31FFFB----------------------------- INT 31 P - Causeway v1.3 - "cwcLoad" - LOAD/EXPAND CWC-COMPRESSED FILE AX = FFFBh BX = source file handle ES:EDI -> memory buffer into which to expand file Return: CF clear if successful ECX = expanded data length CF set on error EAX = error code (01h file error, 02h bad data, 03h not CWC file) Note: the provided file may consist of the concatenation of several CWC files; the one beginning at the current file position will be expanded SeeAlso: AX=FF2Bh --------v-32--------------------------------- INT 32 - VIRUS - "Tiny" Viruses - ORIGINAL INT 21h VECTOR SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 31"VIRUS",INT 44"VIRUS" --------v-32--------------------------------- INT 32 - VIRUS - "Plovdiv 1.3"/"Damage 1.3" - ORIGINAL INT 21h VECTOR SeeAlso: INT 31"VIRUS",INT 9E"VIRUS" --------y-326E------------------------------- INT 32 - NOISE.SYS 0.53 - API AH = 6Eh (function ID) AL = subfunction (see INT 32/AX=6E00h) Return: CF set on error AL = error code (see #03166) CF clear if successful Notes: INT 32 is only a proposed interface for NOISE.SYS. Use the IOCTL READ from the RANDOM device to determine the interrupt and function ID used by the driver, since future versions may use the Alternate Multiplex Interrupt (AMIS) at INT 2Dh. the beta v0.51 had a substantially different API on INT 32/AH=6Eh (Table 03166) Values for NOISE.SYS error codes: 00h subfunction not supported FBh random pool is empty FCh quality of sample is too low FDh too many processes using the API or driver FEh subfunction is disabled in the current build FFh successful --------y-326E00----------------------------- INT 32 - NOISE.SYS v0.53+ - INSTALLATION CHECK AX = 6E00h Return: AL = installation status 00h not installed FFh installed CX = version (ie, 0123h = Version 1.2.3) DX:DI -> signature string --------y-326E01----------------------------- INT 32 - NOISE.SYS v0.53+ - GET ENTRY POINT AX = 6E01h Return: AL = FFh DX:DI -> far call hook ----------326E04----------------------------- INT 32 - NOISE.SYS v0.55+ - GET INTERRUPT HOOK LIST AX = 6E04h Return: AL = status 00h = unimplemented 04h = DX:BX -> interrupt hook list FEh = subfunction disabled Note: the hook list array ends with API interrupt (usually 32h, although it will differ if the API is installed at another interrupt) ----------326E06----------------------------- INT 32 - NOISE.SYS v0.55+ - GET DEVICE DRIVER HEADER AX = 6E06h Return: AL = number of device drivers in NOISE.SYS chain 02h = default (for RANDOM and URANDOM devices) AH = AMIS device driver flags (set to 00h for now) DX:BX -> first device in chain (see #01646) SeeAlso: INT 2D/AL=06h --------y-326E10----------------------------- INT 32 - NOISE.SYS v0.53+ - STATUS CHECK AX = 6E10h Return: CF set on error AL = error code (FDh) (see #03166) CF clear if successful AL = status FFh successful BH = number of processes using the API CX = number of random bytes waiting DX = maximum possible bytes waiting (if CX=DX, the pool is full) Note: this subfunction is a convenient way to check the driver if any fresh bytes are waiting in the output pool. SeeAlso: INT 32/AH=6Eh,AX=6E00h,AX=6E11h --------y-326E11----------------------------- INT 32 - NOISE.SYS v0.53+ - GET ENTROPY ESTIMATE AX = 6E11h Return: CF set on error AL = error code (00h,FDh,FEh) (see #03166) CF clear if successful EBX = estimated bit count (refer to note below) CL = FRACBITS (number of fractional bits) EDX = low 32-bits of total number of samples added Note: the estimated number of fresh random bits is equal to (EAX >> FRACBITS) + ((EAX & ((1 << FRACBITS)-1) / (1 << FRACBITS)) SeeAlso: AH=6Eh,AX=6E00h --------y-326E12----------------------------- INT 32 - NOISE.SYS v0.53+ - ADD SAMPLE FROM FAST TIMER AX = 6E12h Return: CF set on error AL = error code (FCh,FDh,FEh) (see #03166) CF clear if successful CX = number of random bytes waiting Note: subfunctions 12h and 13h are meant for applications or devices which are able to gather entropy from other sources which are not polled by NOISE.SYS (for example, a communications driver could use this call to sample packet arrival times). SeeAlso: AX=6E00h,AX=6E10h,AX=6E13h --------y-326E13----------------------------- INT 32 - NOISE.SYS v0.53+ - ADD 16-BIT SAMPLE TO RANDOM POOL AX = 6E13h DX = sample Return: CF set on error AL = error code (FCh,FEh) (see #03166) CF clear if successful CX = number of random bytes waiting SeeAlso: AX=6E00h,AX=6E11h --------y-326E14----------------------------- INT 32 - NOISE.SYS v0.53+ - GET FLAGS AX = 6E14h Return: BX = flags (see #03167) CX = mask of settable flags in BX SeeAlso: AX=6E00h,AX=6E15h Bitfields for NOISE.SYS flags: Bit(s) Description (Table 03167) 0 MS Windows active 1-5 reserved 6 clock drift sampling 7 video retrace drift sampling 8 network access sampling (not implemented yet in 0.53) 9 CD-ROM access sampling (not implemented yet in 0.53) 10 DOS spinner 11 DOS process start/end and miscellaneous process activity sampling 12 mouse movement/button sampling 13 disk sampling (INT 13) 14 keystroke timings 15 reserved for hardware RNG --------y-326E15----------------------------- INT 32 - NOISE.SYS v0.53+ - SET FLAGS AX = 6E15h BX = flags (see #03167) Return: BX = new flags Note: flags which AX=6E14h indicates are not settable should be masked off by ANDing with the CX returned by AX=6E14h SeeAlso: AX=6E00h,AX=6E14h --------y-326E16----------------------------- INT 32 - NOISE.SYS v0.53+ - READ URANDOM BYTES AX = 6E16h CX = number of bytes ES:DI -> buffer Return: CF set on error AL = error code (FDh,FEh) (see #03166) CF clear if successful CX = number of random bytes read SeeAlso: AX=6E00h,AX=6E12h,AX=6E17h --------y-326E17----------------------------- INT 32 - NOISE.SYS v0.53+ - READ RANDOM BYTES AX = 6E17h CX = number of bytes ES:DI -> buffer Return: CF set on error AL = error code (FBh,FDh,FEh) (see #03166) CF clear if successful CX = number of random bytes read SeeAlso: AX=6E00h,AX=6E16h ----------326E18----------------------------- INT 32 - NOISE.SYS v0.6+ - READ CONTROL RECORD AX = 6E18h CX = buffer size ES:DI -> buffer Return: AL = status 00h unimplemented (before v0.6) FEh subfunction is disabled FFh successful CX = number of bytes read Note: the control record corresponds to the IOCTL Read record for the RANDOM device ----------326E------------------------------- INT 32 - NOISE.SYS - RESERVED FOR FUTURE USE AH = 6Eh AL = 19h to 3Fh Return: AL = 00h Note: these functions are reserved for future use; user additions to the the driver should use subfunctions 40h to FFh. --------M-330000----------------------------- INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS AX = 0000h Return: AX = status 0000h hardware/driver not installed FFFFh hardware/driver installed BX = number of buttons 0000h other than two 0002h two buttons (many drivers) 0003h Mouse Systems/Logitech three-button mouse FFFFh two buttons Notes: since INT 33 might be uninitialized on old machines, the caller should first check that INT 33 is neither 0000h:0000h nor points at an IRET instruction (BYTE CFh) before calling this API to use mouse on a Hercules-compatible monographics card in graphics mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1, and then call this function. Logitech drivers v5.01 and v6.00 reportedly do not correctly use Hercules graphics in dual-monitor systems, while version 4.10 does. the Logitech mouse driver contains the signature string "LOGITECH" three bytes past the interrupt handler; many of the Logitech mouse utilities check for this signature. Logitech MouseWare v6.30 reportedly does not support CGA video modes if no CGA is present when it is started and the video board is later switched into CGA emulation SeeAlso: AX=0011h,AX=0021h,AX=002Fh,INT 62/AX=007Ah,INT 74 --------M-330001----------------------------- INT 33 - MS MOUSE v1.0+ - SHOW MOUSE CURSOR AX = 0001h SeeAlso: AX=0002h,INT 16/AX=FFFEh,INT 62/AX=007Bh,INT 6F/AH=06h"F_TRACK_ON" --------M-330002----------------------------- INT 33 - MS MOUSE v1.0+ - HIDE MOUSE CURSOR AX = 0002h Note: multiple calls to hide the cursor will require multiple calls to function 01h to unhide it. SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh,INT 62/AX=007Bh SeeAlso: INT 6F/AH=08h"F_TRACK_OFF" --------M-330003----------------------------- INT 33 - MS MOUSE v1.0+ - RETURN POSITION AND BUTTON STATUS AX = 0003h Return: BX = button status (see #03168) CX = column DX = row Note: in text modes, all coordinates are specified as multiples of the cell size, typically 8x8 pixels SeeAlso: AX=0004h,AX=000Bh,INT 2F/AX=D000h"ZWmous" Bitfields for mouse button status: Bit(s) Description (Table 03168) 0 left button pressed if 1 1 right button pressed if 1 2 middle button pressed if 1 (Mouse Systems/Logitech/Genius) --------M-330004----------------------------- INT 33 - MS MOUSE v1.0+ - POSITION MOUSE CURSOR AX = 0004h CX = column DX = row Note: the row and column are truncated to the next lower multiple of the cell size (typically 8x8 in text modes); however, some versions of the Microsoft documentation incorrectly state that the coordinates are rounded SeeAlso: AX=0003h,INT 62/AX=0081h,INT 6F/AH=10h"F_PUT_SPRITE" --------M-330005----------------------------- INT 33 - MS MOUSE v1.0+ - RETURN BUTTON PRESS DATA AX = 0005h BX = button number (see #03169) Return: AX = button states (see #03168) BX = number of times specified button has been pressed since last call CX = column at time specified button was last pressed DX = row at time specified button was last pressed Note: at least for the Genius mouse driver, the number of button presses returned is limited to 7FFFh SeeAlso: AX=0006h,INT 62/AX=007Ch (Table 03169) Values for mouse button number: 0000h left 0001h right 0002h middle (Mouse Systems/Logitech/Genius mouse) --------M-330006----------------------------- INT 33 - MS MOUSE v1.0+ - RETURN BUTTON RELEASE DATA AX = 0006h BX = button number (see #03169) Return: AX = button states (see #03168) BX = number of times specified button has been released since last call CX = column at time specified button was last released DX = row at time specified button was last released Note: at least for the Genius mouse driver, the number of button releases returned is limited to 7FFFh SeeAlso: AX=0005h,INT 62/AX=007Ch --------M-330007----------------------------- INT 33 - MS MOUSE v1.0+ - DEFINE HORIZONTAL CURSOR RANGE AX = 0007h CX = minimum column DX = maximum column Note: in text modes, the minimum and maximum columns are truncated to the next lower multiple of the cell size, typically 8x8 pixels SeeAlso: AX=0008h,AX=0010h,AX=0031h,INT 62/AX=0080h SeeAlso: INT 6F/AH=0Ch"F_SET_LIMITS_X" --------M-330008----------------------------- INT 33 - MS MOUSE v1.0+ - DEFINE VERTICAL CURSOR RANGE AX = 0008h CX = minimum row DX = maximum row Note: in text modes, the minimum and maximum rows are truncated to the next lower multiple of the cell size, typically 8x8 pixels SeeAlso: AX=0007h,AX=0010h,AX=0031h,INT 62/AX=0080h SeeAlso: INT 6F/AH=0Eh"F_SET_LIMITS_Y" --------M-330009----------------------------- INT 33 - MS MOUSE v3.0+ - DEFINE GRAPHICS CURSOR AX = 0009h BX = column of cursor hot spot in bitmap (-16 to 16) CX = row of cursor hot spot (-16 to 16) ES:DX -> mask bitmap (see #03170) Notes: in graphics modes, the screen contents around the current mouse cursor position are ANDed with the screen mask and then XORed with the cursor mask the Microsoft mouse driver v7.04 and v8.20 uses only BL and CL, so the hot spot row/column should be limited to -128..127 Microsoft KnowledgeBase article Q19850 states that the high bit is right-most, but that statement is contradicted by all other available documentation SeeAlso: AX=000Ah,AX=0012h,AX=002Ah,INT 62/AX=007Fh,INT 6F/AH=0Ah"F_DEF_MASKS" Format of mouse mask bitmap: Offset Size Description (Table 03170) 00h 16 WORDs screen mask 10h 16 WORDs cursor mask Note: each word defines the sixteen pixels of a row, low bit rightmost --------M-33000A----------------------------- INT 33 - MS MOUSE v3.0+ - DEFINE TEXT CURSOR AX = 000Ah BX = hardware/software text cursor 0000h software CX = screen mask DX = cursor mask 0001h hardware CX = start scan line DX = end scan line Note: when the software cursor is selected, the character/attribute data at the current screen position is ANDed with the screen mask and then XORed with the cursor mask SeeAlso: AX=0009h,INT 62/AX=007Eh --------M-33000B----------------------------- INT 33 - MS MOUSE v1.0+ - READ MOTION COUNTERS AX = 000Bh Return: CX = number of mickeys mouse moved horizontally since last call DX = number of mickeys mouse moved vertically Notes: a mickey is the smallest increment the mouse can sense positive values indicate down/right SeeAlso: AX=0003h,AX=001Bh,AX=0027h --------M-33000C----------------------------- INT 33 - MS MOUSE v1.0+ - DEFINE INTERRUPT SUBROUTINE PARAMETERS AX = 000Ch CX = call mask (see #03171) ES:DX -> FAR routine (see #03172) SeeAlso: AX=0018h Bitfields for mouse call mask: Bit(s) Description (Table 03171) 0 call if mouse moves 1 call if left button pressed 2 call if left button released 3 call if right button pressed 4 call if right button released 5 call if middle button pressed (Mouse Systems/Logitech/Genius mouse) 6 call if middle button released (Mouse Systems/Logitech/Genius mouse) 7-15 unused Note: some versions of the Microsoft documentation incorrectly state that CX bit 0 means call if mouse cursor moves (Table 03172) Values interrupt routine is called with: AX = condition mask (same bit assignments as call mask) BX = button state CX = cursor column DX = cursor row SI = horizontal mickey count DI = vertical mickey count Notes: some versions of the Microsoft documentation erroneously swap the meanings of SI and DI in text modes, the row and column will be reported as a multiple of the character cell size, typically 8x8 pixels --------M-33000D----------------------------- INT 33 - MS MOUSE v1.0+ - LIGHT PEN EMULATION ON AX = 000Dh SeeAlso: AX=000Eh,INT 10/AH=04h --------M-33000E----------------------------- INT 33 - MS MOUSE v1.0+ - LIGHT PEN EMULATION OFF AX = 000Eh SeeAlso: AX=000Dh --------M-33000F----------------------------- INT 33 - MS MOUSE v1.0+ - DEFINE MICKEY/PIXEL RATIO AX = 000Fh CX = number of mickeys per 8 pixels horizontally (default 8) DX = number of mickeys per 8 pixels vertically (default 16) SeeAlso: AX=0013h,AX=001Ah,INT 62/AX=0082h --------M-330010----------------------------- INT 33 - MS MOUSE v1.0+ - DEFINE SCREEN REGION FOR UPDATING AX = 0010h CX,DX = X,Y coordinates of upper left corner SI,DI = X,Y coordinates of lower right corner Note: mouse cursor is hidden in the specified region, and needs to be explicitly turned on again SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"Genius MOUSE",AX=0031h --------M-330010----------------------------- INT 33 - Genius MOUSE - DEFINE SCREEN REGION FOR UPDATING AX = 0010h ES:DX -> update region list (see #03173) Notes: mouse cursor is hidden in the specified region, and needs to be explicitly turned on again this version of the call is described in an August 1988 version of the Genius Mouse programmer's reference; it has been changed to conform to the Microsoft version shown above by version 9.06 (and possibly earlier versions) SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"MS MOUSE" Format of Genius Mouse update region list: Offset Size Description (Table 03173) 00h WORD left-most column 02h WORD top-most row 04h WORD right-most column 06h WORD bottom-most row --------M-330011----------------------------- INT 33 - Genius Mouse 9.06 - GET NUMBER OF BUTTONS AX = 0011h Return: AX = FFFFh BX = number of buttons SeeAlso: AX=0000h --------M-330012----------------------------- INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK AX = 0012h BH = cursor width in words CH = rows in cursor BL = horizontal hot spot (-16 to 16) CL = vertical hot spot (-16 to 16) ES:DX -> bit map of screen and cursor maps Return: AX = FFFFh if successful SeeAlso: AX=0009h,AX=002Ah,AX=0035h --------M-330013----------------------------- INT 33 - MS MOUSE v5.0+ - DEFINE DOUBLE-SPEED THRESHOLD AX = 0013h DX = threshold speed in mickeys/second, 0000h = default of 64/second Note: if speed exceeds threshold, the cursor's on-screen motion is doubled SeeAlso: AX=000Fh,AX=001Bh,AX=002Ch --------M-330014----------------------------- INT 33 - MS MOUSE v3.0+ - EXCHANGE INTERRUPT SUBROUTINES AX = 0014h CX = call mask (see #03171) ES:DX -> FAR routine Return: CX = call mask of previous interrupt routine ES:DX = FAR address of previous interrupt routine SeeAlso: AX=000Ch,AX=0018h --------M-330015----------------------------- INT 33 - MS MOUSE v6.0+ - RETURN DRIVER STORAGE REQUIREMENTS AX = 0015h Return: BX = size of buffer needed to store driver state SeeAlso: AX=0016h,AX=0017h,AX=0042h --------M-330016----------------------------- INT 33 - MS MOUSE v6.0+ - SAVE DRIVER STATE AX = 0016h BX = size of buffer (see AX=0015h) ES:DX -> buffer for driver state Note: although not documented (since the Microsoft driver does not use it), many drivers appear to require BX on input SeeAlso: AX=0015h,AX=0017h --------M-330017----------------------------- INT 33 - MS MOUSE v6.0+ - RESTORE DRIVER STATE AX = 0017h BX = size of buffer (see AX=0015h) ES:DX -> buffer containing saved state Notes: although not documented (since the Microsoft driver does not use it), many drivers appear to require BX on input some mouse drivers range-check the values in the saved state based on the current video mode; thus, the video mode should be restored before the mouse driver's state is restored SeeAlso: AX=0015h,AX=0016h --------M-330018----------------------------- INT 33 - MS MOUSE v6.0+ - SET ALTERNATE MOUSE USER HANDLER AX = 0018h CX = call mask (see #03174) ES:DX -> FAR routine to be invoked on mouse events (see #03175) Return: AX = status 0018h if successful FFFFh on error Notes: up to three handlers can be defined by separate calls to this function, each with a different combination of shift states in the call mask; calling this function again with a call mask of 0000h undefines the specified handler (official documentation); specifying the same call mask and an address of 0000h:0000h undefines the handler (real life) some versions of the documentation erroneously reverse the order of the bits in the call mask SeeAlso: AX=000Ch,AX=0014h,AX=0019h Bitfields for mouse call mask: Bit(s) Description (Table 03174) 0 call if mouse moves 1 call if left button pressed 2 call if left button released 3 call if right button pressed 4 call if right button released 5 call if shift button pressed during event 6 call if ctrl key pressed during event 7 call if alt key pressed during event Note: at least one of 5-7 must be set (Table 03175) Values user handler is called with: AX = condition mask (same bit assignments as call mask) BX = button state CX = cursor column DX = cursor row SI = horizontal mickey count DI = vertical mickey count Return: registers preserved Note: in text modes, the row and column will be reported as a multiple of the cell size, typically 8x8 pixels --------M-330019----------------------------- INT 33 - MS MOUSE v6.0+ - RETURN USER ALTERNATE INTERRUPT VECTOR AX = 0019h CX = call mask (see #03174) Return: BX:DX = user interrupt vector CX = call mask (0000h if not found) Note: attempts to find a user event handler (defined by function 18h) whose call mask matches CX SeeAlso: AX=0018h --------M-33001A----------------------------- INT 33 - MS MOUSE v6.0+ - SET MOUSE SENSITIVITY AX = 001Ah BX = horizontal speed \ CX = vertical speed / (see AX=000Fh) DX = double speed threshold (see AX=0013h) SeeAlso: AX=0013h,AX=001Bh,INT 62/AX=0082h --------M-33001B----------------------------- INT 33 - MS MOUSE v6.0+ - RETURN MOUSE SENSITIVITY AX = 001Bh Return: BX = horizontal speed CX = vertical speed DX = double speed threshold SeeAlso: AX=000Bh,AX=001Ah --------M-33001C----------------------------- INT 33 - MS MOUSE v6.0+ - SET INTERRUPT RATE AX = 001Ch BX = rate (see #03176) Notes: only available on InPort mouse values greater than 4 may cause unpredictable driver behavior (Table 03176) Values for mouse interrupt rate: 00h no interrupts allowed 01h 30 per second 02h 50 per second 03h 100 per second 04h 200 per second --------M-33001D----------------------------- INT 33 - MS MOUSE v6.0+ - DEFINE DISPLAY PAGE NUMBER AX = 001Dh BX = display page number Note: the cursor will be displayed on the specified page SeeAlso: AX=001Eh --------M-33001E----------------------------- INT 33 - MS MOUSE v6.0+ - RETURN DISPLAY PAGE NUMBER AX = 001Eh Return: BX = display page number SeeAlso: AX=001Dh --------M-33001F----------------------------- INT 33 - MS MOUSE v6.0+ - DISABLE MOUSE DRIVER AX = 001Fh Return: AX = status 001Fh successful ES:BX = INT 33 vector before mouse driver was first installed FFFFh unsuccessful Notes: restores vectors for INT 10 and INT 71 (8086) or INT 74 (286/386) if you restore INT 33 to ES:BX, driver will be completely disabled many drivers return AX=001Fh even though the driver has been disabled SeeAlso: AX=0020h --------M-330020----------------------------- INT 33 - MS MOUSE v6.0+ - ENABLE MOUSE DRIVER AX = 0020h Return: AX = status 0020h successful FFFFh unsuccessful Notes: restores vectors for INT 10h and INT 71h (8086) or INT 74h (286/386) which were removed by function 1Fh Microsoft's documentation states that no value is returned SeeAlso: AX=001Fh --------M-330021----------------------------- INT 33 - MS MOUSE v6.0+ - SOFTWARE RESET AX = 0021h Return: AX = status FFFFh if mouse driver installed BX = number of buttons (FFFFh = two buttons) 0021h if mouse driver not installed Note: this call is identical to funtion 00h, but does not reset the mouse SeeAlso: AX=0000h --------M-330022----------------------------- INT 33 - MS MOUSE v6.0+ - SET LANGUAGE FOR MESSAGES AX = 0022h BX = language (see #03177) Note: only available on international versions of the driver; US versions ignore this call SeeAlso: AX=0023h (Table 03177) Values for mouse driver language: 00h English 01h French 02h Dutch 03h German 04h Swedish 05h Finnish 06h Spanish 07h Portugese 08h Italian --------M-330023----------------------------- INT 33 - MS MOUSE v6.0+ - GET LANGUAGE FOR MESSAGES AX = 0023h Return: BX = language (see #03177) Note: the US version of the driver always returns zero SeeAlso: AX=0022h --------M-330024BX0000----------------------- INT 33 - MS MOUSE v6.26+ - GET SOFTWARE VERSION, MOUSE TYPE, AND IRQ NUMBER AX = 0024h BX = 0000h to check for function's existence Return: AX = FFFFh on error otherwise, BH = major version BL = minor version CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP) CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7,...,0Fh=IRQ15) Note: although current Microsoft documentation states that this function was introduced in v6.26, it appears to have been present as early as v6.02 (for earlier versions, use INT 33/AX=006Dh) SeeAlso: AX=004Dh,AX=006Dh --------M-330025----------------------------- INT 33 - MS MOUSE v6.26+ - GET GENERAL DRIVER INFORMATION AX = 0025h Return: AX = general information (see #03178) BX = cursor lock flag for OS/2 to prevent reentrancy problems CX = mouse code active flag (for OS/2) DX = mouse driver busy flag (for OS/2) Bitfields for general mouse driver information: Bit(s) Description (Table 03178) 15 driver loaded as device driver rather than TSR 14 driver is newer integrated type 13,12 current cursor type 00 software text cursor 01 hardware text cursor (CRT Controller's cursor) 1X graphics cursor 11-8 interrupt rate (see #03176) 7-0 count of currently-active Mouse Display Drivers (MDD), the newer integrated driver type --------M-330026----------------------------- INT 33 - MS MOUSE v6.26+ - GET MAXIMUM VIRTUAL COORDINATES AX = 0026h Return: BX = mouse-disabled flag (0000h mouse enabled, nonzero disabled) CX = maximum virtual X (for current video mode) DX = maximum virtual Y Note: for driver versions before 7.05, this call returns the currently-set maximum coordinates; v7.05+ returns the absolute maximum coordinates SeeAlso: AX=0031h --------M-330026----------------------------- INT 33 - Genius Mouse 9.06 - ??? AX = 0026h Return: CX = 0204h if CX was 0105h on entry, else unchanged --------M-330027----------------------------- INT 33 - MS MOUSE v7.01+ - GET SCREEN/CURSOR MASKS AND MICKEY COUNTS AX = 0027h Return: AX = screen-mask value (or hardware cursor scan-line start for v7.02+) BX = cursor-mask value (or hardware cursor scan-line stop for v7.02+) CX = horizontal mickeys moved since last call DX = vertical mickeys moved since last call SeeAlso: AX=000Bh --------M-330028----------------------------- INT 33 - MS MOUSE v7.0+ - SET VIDEO MODE AX = 0028h CX = new video mode (call is NOP if 0000h) DH = Y font size (00h = default) DL = X font size (00h = default) Return: CL = status (00h = successful) Notes: DX is ignored unless the selected video mode supports font size control when CX=0000h, an internal flag that had been set by a previous call is cleared; this is required before a mouse reset SeeAlso: AX=0029h,INT 10/AH=00h --------M-330029----------------------------- INT 33 - MS MOUSE v7.0+ - ENUMERATE VIDEO MODES AX = 0029h CX = previous video mode 0000h get first supported video mode other get next supported mode after mode CX Return: CX = first/next video mode (0000h = no more video modes) DS:DX -> description of video mode or 0000h:0000h if none Notes: the enumerated video modes may be in any order and may repeat the description string (if available) is terminated by '