home *** CD-ROM | disk | FTP | other *** search
- --------W-2F1600-----------------------------
- INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
- AX = 1600h
- Return: AL = status
- 00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
- 01h Windows/386 2.x running
- 80h XMS version 1 driver installed (neither Windows 3.x enhanced
- mode nor Windows/386 2.x running) (obsolete--see note)
- FFh Windows/386 2.x running
- AL = anything else
- AL = Windows major version number >= 3
- AH = Windows minor version number
- Notes: INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
- drivers, TSRs, and applications) to cooperate with multitasking
- Windows/386 2.x and Windows 3.x and higher enhanced mode.
- certain calls are also supported in the Microsoft 80286 DOS extender in
- Windows standard mode
- this function served as the installation check and AX=1610h served to
- get the driver entry point for XMS version 1, which is now obsolete.
- Use AX=4300h and AX=4310h instead
- SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
- Index: installation check;XMS version 1
- --------W-2F1602-----------------------------
- INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
- AX = 1602h
- Return: ES:DI -> Windows/386 2.x API procedure entry point
- Notes: this interface is supported in Windows 3.x only for 2.x compatibility
- to get the current virtual machine (VM) ID in Windows/386 2.x:
- AX = 0000h
- ES:DI -> return address
- JUMP to address returned from INT 2F/AX=1602h
- After JUMP, at return address:
- BX = current VM ID.
- SeeAlso: AX=C020h
- --------W-2F1603-----------------------------
- INT 2F - MS Windows/386 - GET INSTANCE DATA
- AX = 1603h
- Return: AX = 5248h ('RH') if supported
- DS:SI -> Windows/386 instance data (see below)
- Notes: reportedly supported by RM Nimbus MS-DOS 3.3 kernel
- this function is called by DOSMGR when AX=1607h/BX=0015h is not
- supported, as is the case in DOS versions prior to 5.0
- see Geoff Chappell's book _DOS_Internals_ for additional discussions of
- this function, DOSMGR's behavior, and instancing in general
- SeeAlso: AX=1607h/BX=0015h
-
- Format of Windows/386 instance data:
- Offset Size Description
- 00h WORD segment of IO.SYS (0000h = default 0070h)
- 02h WORD offset in IO.SYS of STACKS data structure (DOS 3.2x)
- 0000h if not applicable
- 04h WORD number of instance data entries (max 32)
- 06h Array of instance data entries
- Offset Size Description
- 00h WORD segment (0002h = DOS kernel)
- 02h WORD offset
- 04h WORD size
- --------W-2F1605-----------------------------
- INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST
- AX = 1605h
- ES:BX = 0000h:0000h
- DS:SI = 0000h:0000h
- CX = 0000h
- DX = flags
- bit 0 = 0 if Windows enhanced-mode initialization
- bit 0 = 1 if Microsoft 286 DOS extender initialization
- bits 1-15 reserved (undefined)
- DI = version number (major in upper byte, minor in lower)
- Return: CX = 0000h if okay for Windows to load
- CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
- CX <> 0 if Windows should not load
- ES:BX -> startup info structure (see below)
- DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
- Notes: the Windows enhanced mode loader and Microsoft 286 DOS extender will
- broadcast an INT 2F/AX=1605h call when initializing. Any DOS device
- driver or TSR can watch for this broadcast and return the appropriate
- values. If the driver or TSR returns CX <> 0, it is also its
- responsibility to display an error message.
- each handler must first chain to the prior INT 2F handler with
- registers unchanged before processing the call
- if the handler requires local data on a per-VM basis, it must store the
- returned ES:BX in the "next" field of a startup info structure and
- return a pointer to that structure in ES:BX
- a single TSR may set the V86 mode enable/disable callback; if DS:SI is
- already nonzero, the TSR must fail the initialization by setting CX
- nonzero
- MSD checks for Windows 3.0 running in standard mode by testing whether
- CX=FFFFh and other registers are unchanged on return
- SeeAlso: AX=1606h,AX=1608h,AX=4B05h
-
- Format of Startup Information Structure:
- Offset Size Description
- 00h 2 BYTEs major, minor version of info structure
- 02h DWORD pointer to next startup info structure or 0000h:0000h
- 06h DWORD pointer to ASCIZ name of virtual device file or 0000h:0000h
- 0Ah DWORD virtual device reference data (see below)
- (only used if above nonzero)
- 0Eh DWORD pointer to instance data records or 0000h:0000h
-
- Format of one Instance Item in array:
- Offset Size Description
- 00h DWORD address of instance data (end of array if 0000h:0000h)
- 04h WORD size of instance data
-
- Format of Virtual Device Reference Data:
- Offset Size Description
- 00h DWORD physical address of ??? or 00000000h
- 04h DWORD physical address of ??? table
- 08h DWORD "DEST_PAGE" address to which pages must be mapped
- 0Ch N DWORDs "SRC_PAGE" physical addresses of the pages
- 00000000h = end of table
- Note: EMM386.EXE sets the first pointer to the start of the device driver
- chain, the second pointer to a field of 40h bytes followed by a
- 16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
- the start segment of the UMB area
-
- Virtual mode enable/disable procedure called with:
- AX = 0000h disable V86 mode
- AX = 0001h enable V86 mode
- interrupts disabled
- Return: CF set on error
- CF clear if successful
- interrupts disabled
- --------W-2F1606-----------------------------
- INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST
- AX = 1606h
- DX = flags
- bit 0 = 0 if Windows enhanced-mode exit
- bit 0 = 1 if Microsoft 286 DOS extender exit
- bits 1-15 reserved (undefined)
- Notes: if the init broadcast fails (AX=1605h returned CX <> 0), then this
- broadcast will be issued immediately.
- this call will be issued in real mode
- SeeAlso: AX=1605h,AX=1609h
- --------W-2F1607-----------------------------
- INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
- AX = 1607h
- BX = virtual device ID (see INT 2F/AX=1684h)
- CX = (usually) callout subfunction
- Return: (usually) AX,BX,CX,DX,ES contain results
- Notes: more of a convention than an API, this call specifies a standard
- mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
- to DOS device drivers and TSRs
- see below for details on several virtual devices
- SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
- SeeAlso: AX=1684h,AX=C020h
- --------W-2F1607BX0006-----------------------
- INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
- AX = 1607h
- BX = 0006h (VxD identifier of "V86MMGR")
- CX = 0000h
- Return: AX = status
- 0000h if local A20 state changed
- 1607h if A20 unchanged
- other if global A20 state changed
- --------W-2F1607BX000C-----------------------
- INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
- AX = 1607h
- BX = 000Ch (VxD identifier of "VMD")
- Return: CX = nonzero if mouse driver already virtualized
- Note: VMD (Virtual Mouse Driver) calls this and then checks whether CX is
- nonzero; if yes, it will not automatically virtualize the mouse
- driver. This would be used if MOUSE.COM already virtualizes
- itself using the Windows API.
- SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
- ----------2F1607BX0010-----------------------
- INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
- AX = 1607h
- BX = 0010h (VxD identifier of "BLOCKDEV")
- CX = function
- 0001h starting FastDisk compatibility tests
- 0002h ending FastDisk compatibility tests
- 0003h check if FastDisk installation allowed
- Return: CX = 0000h if allowed
- Note: this interface is called by the Windows FastDisk driver (such as
- WDCTRL) when it thinks that the INT 13h handler immediately below
- IO.SYS's INT 13h code is not in ROM; it should be supported by any
- program which hooks itself underneath IO.SYS's INT 13h code with
- INT 2F/AH=13h
- SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
- --------W-2F1607BX0014-----------------------
- INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
- AX = 1607h
- BX = 0014h (VxD identifier of "VNETBIOS")
- Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
- command code (see below)
- Note: VNETBIOS (Virtual NetBIOS) calls this function to determine whether
- the NetBIOS has an extensions Windows should know about
- SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
-
- Values for action code:
- 00h "VN_Unknown" unknown command
- 04h "VN_No_Map" no memory mapping necessary
- 08h "VN_Map_In" input buffer is quickly used, so no global mapping needed
- 0Ch "VN_Map_In" output buffer is quickly used, so no global mapping needed
- 10h "VN_Map_In_Out" buffer is quickly used, so no global mapping needed
- 14h "VN_Chain_Send" the chain-send command
- 18h "VN_Cancel" special case for cancel command
- 1Ch "VN_Buffer_In" buffer is incoming
- 20h "VN_Buffer_Out" buffer is outgoing
- 24h "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
- --------D-2F1607BX0015-----------------------
- INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
- AX = 1607h
- BX = 0015h (VxD identifier of "DOSMGR")
- CX = function
- 0000h query instance processing
- DX = 0000h
- Return: CX = state
- 0000h not instanced
- other instanced (DOS 5+ kernel returns 0001h)
- DX = segment of DOS drivers or 0000h for
- default of 0070h
- ES:BX -> patch table (see below)
- 0001h set patches in DOS
- DX = bit mask of patch requests
- bit 0 enable critical sections
- bit 1 NOP setting/checking user ID
- bit 2 turn INT 21/AH=3Fh on STDIN into polling loop
- bit 3 trap stack fault in "SYSINIT" to WIN386
- bit 4 BIOS patch to trap "Insert disk X:" to WIN386
- Return: AX = B97Ch
- BX = bit mask of patches applied
- DX = A2ABh
- 0002h remove patches in DOS (ignored by DOS 5.0 kernel)
- DX = bit mask of patch requests (see function 0001h)
- Return: CX = 0000h (DOS 5-6)
- Note: return values are ignored by DOSMGR in Windows 3.1
- 0003h get size of DOS data structures
- DX = bit mask of request (only one bit can be set)
- bit 0: Current Directory Structure size
- Return: if supported request:
- AX = B97Ch
- CX = size in bytes of requested structure
- DX = A2ABh
- else:
- CX = 0000h
- all other registers preserved
- 0004h determine instanced data structures
- Return: AX = B97Ch if supported
- DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
- BX = bit mask of instanced items
- bit 0: CDS
- bit 1: SFT
- bit 2: device list
- bit 3: DOS swappable data area
- 0005h get device driver size
- ES = segment of device driver
- Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
- DX:AX = A2ABh:B97Ch if successful
- BX:CX = size of device driver in bytes
- Notes: DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
- been instanced via this API and will not perform its own default
- instancing of the normal DOS/BIOS data if so; if this API is not
- supported, DOSMGR will also try to access instancing data through
- INT 2F/AX=1603h
- these functions are supported by the DOS 5+ kernel; DOSMGR contains
- tables of instancing information for earlier versions of DOS
- see Geoff Chappell's book _DOS_Internals_ for additional discussions of
- DOSMGR's behavior and instancing in general
- SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
-
- Format of patch table:
- Offset Size Description
- 00h 2 BYTEs DOS version (major, minor)
- 02h WORD offset in DOS data segment of "SAVEDS"
- 04h WORD offset in DOS data segment of "SAVEBX"
- 06h WORD offset in DOS data segment of InDOS flag
- 08h WORD offset in DOS data segment of User ID word
- 0Ah WORD offset in DOS data segment of "CritPatch" table to enable
- critical section calls (see INT 2A/AH=80h)
- 0Ch WORD (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
- containing segment of last MCB in conventional memory
- --------E-2F1607BX22C0-----------------------
- INT 2F - Rational Systems DOS/4GW - ???
- AX = 1607h
- BX = 22C0h
- ???
- Return: ???
- SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
- --------W-2F1608-----------------------------
- INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
- AX = 1608h
- Notes: called after all installable devices have been initialized
- real-mode software may be called between the Windows enhanced-mode init
- call (AX=1605h) and this call; the software must detect this
- situation
- SeeAlso: AX=1605h,AX=1609h
- --------W-2F1609-----------------------------
- INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
- AX = 1609h
- Note: called at the beginning of a normal exit sequence; not made in the
- event of a fatal system crash
- SeeAlso: AX=1606h,AX=1608h
- --------W-2F160A-----------------------------
- INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
- AX = 160Ah
- Return: AX = 0000h if call supported
- BX = version (BH=major, BL=minor)
- CX = mode (0002h = standard, 0003h = enhanced)
-
-
-
-
-
-
-
-
-
-
-
- INT 21 U - Memory Managers - GET API ENTRY POINT
- AX = 4402h subfn 00h
- BX = file handle for device "EMMXXXX0"
- CX = 0006h (size of buffer in bytes)
- DS:DX -> buffer for API entry point record (see below)
- first byte must be 00h on entry
- Return: CF clear if successful
- buffer filled (see INT 67/AH=3Fh function 1B00h)
- CF set on error
- AX = error code (01h,05h,06h,0Dh) (see AH=59h)
- Notes: this function is supported by Microsoft EMM386.EXE v4.45+ and
- CEMM v5.10+, and is intended for use by MS Windows as it starts up
- if no other program has hooked INT 67, an alternate installation
- check for CEMM is testing for the string
- "COMPAQ EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
- handler's segment; if present, the word at offset 12h contains the
- offset of the API entry point
- SeeAlso: AX=4402h/SF=01h,AX=4402h/SF=02h,AX=4402h"EMM386",INT 67/AH=3Fh
-
- Format of API entry point record:
- Offset Size Description
- 00h WORD ??? (0022h for CEMM 5.11, 0025h for MS EMM386 v4.45)
- 02h DWORD manager's private API entry point (see below,INT 67/AX=FFA5h)
-
- Call CEMM v5.10+ entry point with:
- AH = 00h get memory manager's state
- Return: AH = state
- bit 0: turned OFF
- bit 1: AUTO mode enabled
- AH = 01h set memory manager's state
- AL = new state (00h ON, 01h OFF, 02h AUTO)
- Return: CF clear if successful
- CF set on error
- AH = 02h Weitek coprocessor support
- AL = subfunction
- 00h get Weitek support state
- Return: AL = status
- bit 0: Weitek coprocessor is present
- bit 1: Weitek support is enabled
- 01h turn on Weitek support
- 02h turn off Weitek support
- Return: CF clear if successful
- CF set on error
- AH = error code (01h invalid subfunc, 02h no Weitek)
- AH = 05h get statistics
- ???
- AH > 06h
- Return: CF set
- AH = 01h (invalid function)
- Notes: AH=03h,04h,06h are NOPs which return CF clear, presumably for backwards
- compatibility with earlier versions of CEMM
- in v5.11, AH=05h merely prints an error message (using INT 21/AH=09h)
- stating that a different version of CEMM is installed and it is
- therefore not possible to display the statistics
- --------m-214402SF01-------------------------
-
-
- INT 21 U - Memory Managers - GET EMM IMPORT STRUCTURE ADDRESS
- AX = 4402h subfn 01h
- BX = file handle for device "EMMXXXX0"
- CX = 0006h (size of buffer in bytes)
- DS:DX -> buffer for EMM import structure record (see below)
- first byte must be 01h on entry
- Return: CF clear if successful
- buffer filled (see INT 67/AH=3Fh function 1B00h)
- CF set on error
- AX = error code (01h,05h,06h,0Dh) (see AH=59h)
- Notes: this function is supported by Microsoft EMM386.EXE v4.45+,
- QEMM-386 v6+, and CEMM v5.10+, and is intended for use by MS Windows
- as it starts up
- for QEMM-386, this call always returns an error if Windows3 support
- has been disabled with the NW3 switch
- SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 2F/AX=D201h/BX=5145h
- SeeAlso: INT 67/AH=3Fh
-
- Format of EMM import structure record:
- Offset Size Description
- 00h DWORD physical address of EMM import structure
- 04h BYTE EMM import structure major version
- 05h BYTE EMM import structure minor version
- Note: version 1.00 contains only EMS information (Windows 3.0+)
- version 1.10 contains UMB/XMS/HMA/EMS information (Windows 3.1)
- version 1.11 is version 1.10 plus memory manager maker/product name
-
-
- ; ***************************************************************************
- ; ***************************************************************************
- ; ***************************************************************************
- ; ***************************************************************************
- ; ***************************************************************************
- ; ***************************************************************************
- ; ***************************************************************************
-
- Format of Global EMM Import record:
- Offset Size Description
- 00h BYTE bit flags
- bit 2: ???
- bit 3: free EMM386 virtual HMA only if hma_page_table_paddr!=0
- bit 4: no UMB???
- 01h BYTE reserved (0)
- 02h WORD size of structure in bytes
- 04h WORD structure version
- 06h DWORD reserved
- 0Ah 384 BYTEs 64 EMS frame status records (see below), one per 16K of
- real-mode 1M address space
- 18Ah BYTE ??? (must be at least 3*number_of_EMS_frames+4)
- 18Bh BYTE number of UMB frame descriptors following
- 18Ch 4N DWORDs UMB frame descriptors
- each is 4 DWORDs giving physical page numbers for the four
- 4K pages of a 16K EMS frame (00000000h if non-UMB page)
- var BYTE number of EMS handle info records following
- 16N BYTEs EMS handle info records (see below)
-
-
-
- ---version 1.10+ ---
- DWORD realmode INT 67 vector (used by Windows to set breakpoints)
- DWORD physical address of HMA page table values
- BYTE number of free page entries following
- 2N DWORDs free page entries
- each is:
- DWORD physical page number
- DWORD number of consecutive physical pages
- BYTE number of XMS handle info records following
- 00h if memory manager does not emulate XMS or has real mode
- XMS code which can execute in the Windows environment
- 12N BYTEs XMS handle info records (see below)
- BYTE number of free UMB info records following
- 2N WORDs free UMB info records
- each is:
- WORD real mode start segment
- WORD size in paragraphs
-
-
-
- ---version 1.11---
- 20 BYTEs blank-padded maker name
- 20 BYTEs blank-padded product name
-
-
- Format of EMS frame status record:
- Offset Size Description
- 00h BYTE frame type (see below)
- 01h BYTE owner handle (00h/FFh = none) from frame including UMB
- index to UMB frame descriptors
- 02h WORD logical page for frame, 7FFFh if none, FFFFh if non-EMS frame
- 04h BYTE EMS physical page number (FFh for non-EMS = don't care???)
- 05h BYTE flags for non-EMS frames (00h for EMS frame)
- bits 0,1 for first 4K, bits 2,3 for second 4K, etc:
- 10: direct mapping (linear address = physical address)
- 01: UMB mapping
-
- Bitfields for EMS frame type:
- Bit(s) Description
- 0 EMS frame
- 1 (if EMS frame) in standard 64K page frame
- 2 first 4K of frame is UMB
- 3 second 4K of frame is UMB
- 4 third 4K of frame is UMB
- 5 last 4K of frame is UMB
-
- Format of EMS handle info record:
- Offset Size Description
- 00h BYTE handle number (00h = system handle)
- 01h BYTE flags
- bit 0: normal handle rather than system handle
- bit 2: ??? (set by some EMS managers)
- 02h 8 BYTEs EMS handle's name
- 0Ah WORD number of 16K pages for handle
- 0Ch DWORD physical address of page table entries forming page map
- Note: all values should be zero for the system handle if no large frame
- support is present
-
- Format of XMS handle info record:
- Offset Size Description
- 00h WORD handle
- 02h WORD flags
- bit 0: handle usable by Windows
- (already in use when Windows started if clear)
- bit 1: reserved (0)
- 04h DWORD size in KB (may be zero, used only if flags bit 0 set)
- 08h DWORD physical address (only if flags bit 0 set)
-
-
-
-
- ; ***************************************************************************
- ; ***************************************************************************
- ; ***************************************************************************
- ; ***************************************************************************
- ; ***************************************************************************
- ; ***************************************************************************
- ; ***************************************************************************
-
-
-
- --------m-214402SF02-------------------------
- INT 21 U - Memory Managers - GET MEMORY MANAGER VERSION
- AX = 4402h subfn 02h
- BX = file handle for device "EMMXXXX0"
- CX = 0002h (size of buffer in bytes)
- DS:DX -> buffer for memory manager version (see below)
- first byte must be 02h on entry
- Return: CF clear if successful
- buffer filled
- CF set on error
- AX = error code (01h,05h,06h,0Dh) (see AH=59h)
- Note: this function is supported by Microsoft EMM386.EXE v4.45+ and
- CEMM v5.10+, and is intended for use by MS Windows as it starts up
- SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 67/AH=3Fh
-
- Format of memory manager version:
- Offset Size Description
- 00h BYTE major version
- 01h BYTE minor version (binary)
-
-
-
-
- --------m-214402-----------------------------
- INT 21 U - Microsoft EMM386.EXE v4.45 - GET MEMORY MANAGER INFORMATION
- AX = 4402h
- BX = file handle for device "EMMXXXX0"
- CX = size of buffer in bytes (varies, see below)
- DS:DX -> buffer for returned data (see below)
- first byte must be set on entry to indicate desired data
- Return: CF clear if successful
- buffer filled
- CF set on error
- AX = error code (01h,05h,06h,0Dh) (see AH=59h)
- Notes: an error is returned if the number of bytes to be read does not match
- the number of bytes returned for the specified data item
- this function is part of the interface which allows MS Windows to
- cooperate with memory managers
- SeeAlso: AX=4402h/SF=00h,AX=4402h/SF=01h,AX=4402h/SF=02h,INT 67/AX=FFA5h
-
- Format of data buffer:
- Offset Size Description
- 00h BYTE (call) function
- 03h get ???
- 04h get ???
- ---function 03h---
- 00h WORD ???
- 02h WORD ???
- ---function 04h---
- 00h WORD segment of UMB containing EMM386 code/data
- 02h WORD number of paragraphs of EMM386 code/data in UMB
- 04h WORD ???