Int 2F Fn 1605 - Ms Windows - Windows Enhanced Mode & 286 Dosx Init Broa [W]
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 #2318)
DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
(see #2321)
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 (however, Windows95 is
reported to load regardless of the returned CX).
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
Novell DOS v7.0 (Update 8 - Update 11) TASKMGR in multitasking mode
uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
Microsoft's EMM386.EXE for DOS 5+ when installed with the NOEMS option
changes its driver name from EMMQXXX0 to EMMXXXX0 while Windows is
active
See Also: AX=1606h,AX=1608h,AX=4B05h
Format of Windows Startup Information Structure:
Offset Size Description (Table 2318)
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 #2320)
(only used if above nonzero)
0Eh DWORD pointer to instance data records (see #2319) or 0000h:0000h
Format of one Instance Item in array:
Offset Size Description (Table 2319)
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 (Table 2320)
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
(Table 2321)
Values Windows virtual mode enable/disable procedure is 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