========================================================================= Quarterdeck Office Systems QDPMI Host V1.02 ========================================================================= NOTICE TO END USERS: THIS SOFTWARE MAY BE FREELY COPIED, HOWEVER YOUR ACTUAL USE OF QDPMI IS CONDITIONED UPON (i) YOUR POSSESSION OF AN AUTHORIZED COPY OF QEMM-386 AND (ii) YOUR COMPLIANCE WITH THE TERMS OF THE QEMM-386 QUARTERDECK END USER LICENSE AGREEMENT, WHICH GOVERNS USE OF THIS SOFTWARE. Copyright (c) Quarterdeck Office Systems, Inc. 1986-1992. ALL RIGHTS RESERVED. DOS Extension Technology by ERGO Computing, Inc. Copyright (c) 1991-1992. ALL RIGHTS RESERVED. ========================================================================= INTRODUCTION ------------ The Quarterdeck DPMI Host (QDPMI) is a companion product to the Quarterdeck Expanded Memory Manager-386 (QEMM-386). It is a full implementation of Version 0.9 of the DOS Protected Mode Interface (DPMI) specification, including MS-DOS extensions and virtual memory. DPMI is an emerging industry standard for allowing DOS applications to access the protected mode features of the 80386 and 80486 processors. To DOS application users this means that an application can now be larger and more full featured than those applications restricted to 640K. The DPMI specification was developed by a consortium of computer companies, including Quarterdeck, Borland, Ergo, IBM, Intel, Intelligent Graphics, Locus, Lotus Development, Microsoft, Phar Lap, Phoenix Technologies and Rational Systems. Protected mode multitasking environments, memory managers, or operating systems that implement DPMI functions are called DPMI hosts. Protected mode applications that request DPMI functions (directly or indirectly) are called DPMI clients. DOS applications using DPMI (DPMI clients) can run in a variety of operating environments, including DOS, DR DOS, Microsoft Windows, OS/2, 386-based UNIX, DESQview 386 and DESQview/X provided a DPMI host is present. The Quarterdeck DPMI Host (QDPMI) provides mode-switching and extended memory management to DPMI clients. It runs at a more privileged level than its clients and uses the hardware to enforce a supervisor/user protection model. This allows QDPMI to support centralized virtual memory and maintain full control over client programs' address spaces and access to hardware. Users of Quarterdeck's DESQview 386 and DESQview/X can run multiple QDPMI clients simultaneously, each optionally having its own virtual memory. Software Compatibility ---------------------- DOS applications that support the DPMI specification are just coming to market. The earliest of these are programmer's tools including Microsoft's C/C++ Development System for Windows (version 7), Borland's C++ (version 3) and Intel's Code Builder Kit (version 1.1). QDPMI is compatible with the above programs. Microsoft Windows version 3.1 includes its own DPMI host. When QDPMI sees Windows Enhanced Mode start up, it steps aside, letting Windows provide the DPMI services for programs running in its environment. About This Manual ----------------- This manual is your reference guide to the Quarterdeck DPMI Host (QDPMI). This manual tells you: o How to install QDPMI. o How to specify whether virtual memory is to be used and the amount of virtual memory to be reserved. o About the command line parameters available with QDPMI. The Quarterdeck DPMI Host (QDPMI) requires the Quarterdeck Expanded Memory Manager (QEMM-386) for its services to be made available to DPMI client programs. So before you install QDPMI, please check that QEMM-386 is installed on your system. Installing QDPMI is easy. All you must do is run the QDPMI installation program, INSTALL. During installation, INSTALL will display several screens, either to ask for information or to inform you of its progress. If QEMM-386 is not currently installed in your system, INSTALL will post a warning message, telling you that QEMM-386 was not found in your CONFIG.SYS file and telling you to install it. As mentioned earlier, QDPMI will not work without QEMM- 386. INSTALL will need to know where to copy QDPMI files. The default drive and directory is C:\QEMM. Next INSTALL will ask you whether you would like QDPMI to provide virtual memory support for each DPMI client you run. If you answer Yes, you must then indicate how much disk space should be allocated for the virtual memory swap file. The default is 1024K per DPMI client. When QDPMI uses virtual memory, it creates a virtual memory swap file. INSTALL next asks you whether QDPMI should automatically delete the virtual memory swap file when your application terminates. Creating and deleting the virtual memory swap file takes more time, but conserves disk space. When you have answered the above questions, INSTALL automatically creates the necessary change to your AUTOEXEC.BAT and CONFIG.SYS files needed by DOS to load QDPMI, and offers to modify these files for you. Then it copies the QDPMI files to the drive and directory you indicated. Installing QDPMI from floppy ---------------------------- To install QDPMI from the QDPMI diskette: Place the QDPMI disk in drive A. Type A:INSTALL and press Enter. Installing QDPMI by downloading from the Quarterdeck BBS -------------------------------------------------------- If you have downloaded the QDPMI files from a Quarterdeck bulletin board into a drive/directory on your hard disk: Change to the drive and directory where the QDPMIZIP.EXE file you downloaded from the bulletin board is stored. Type QDPMIZIP and press Enter. NOTE: QDPMIZIP.EXE is a self-extracting zip file that when run will extract three files, INSTALL.EXE, LICENSE.TXT, and QDPMI.QIP into the current directory. Now type INSTALL and press Enter. QDPMI Installation Program -------------------------- NOTE: If you have an LCD or Gas Plasma display, as on some laptops, or a monochrome monitor, we recommend that you run INSTALL in monochrome mode by typing X:INSTALL/m (where X: is the drive and directory containing the QDPMI files. Follow the instructions on the screen. INSTALL copies the QDPMI files to your hard disk and configures QDPMI. It is always a good idea when making changes to your system configuration to run QEMM-386's Optimize program after making your changes. This will insure the best use of your system's memory. After successfully completing the QDPMI installation procedure, it will be necessary to reboot your system to begin using QDPMI. If you want to check that DPMI is working, typing QDPMI at the DOS command line without any parameters will display the current status of QDPMI. That's all there is to installing QDPMI. Installation Notes ------------------ QDPMI Client Initialization with Virtual Memory ----------------------------------------------- At DPMI client initialization time (when an application that requires DPMI services is run), QDPMI will attempt to create the virtual memory swap file whose name and maximum size appear in the QDPMI environment variable. If the swap file name is not specified in the QDPMI environment variable, the file will be opened or created in the directory from which QDPMI.SYS was loaded at system startup, with the base name QDPMI.SWP. If the swap file exists, it will be used. Its existing size will be truncated to zero length, and increased as needed by QDPMI. If the KILLSWAP option is specified, QDPMI will delete the virtual memory swap file upon the termination of the DPMI client application. In multitasking environments such as DESQview and DESQview/X, each task or DESQview window can have its own unique set of QDPMI switches and QDPMI environment variable options in force. It is necessary that each simultaneously executing DPMI client application utilizing virtual memory have its own unique virtual memory swap file. The name of the swap file that is provided in the QDPMI environment variable is therefore modified by QDPMI before it is opened or created, by appending a digit to the end of its base name. For example: QDPMI.SWP would become QDPMI0.SWP, and QDPMISWP.SWP would become QDPMISW0.SWP. The actual digit will vary depending on whether DESQview is active or not, and how many other DPMI clients are active in other DOS partitions. If for some reason QDPMI cannot find or create its virtual memory swapfile, it will issue a message and disable the virtual memory feature for the current client's invocation. Causes for this may be: o Insufficient disk space. o Improperly specified Swap File name (QDPMI environment variable). o Non-existent directory specified. System Interrupt Stack Configuration ------------------------------------ It is important for some applications that a line exist in CONFIG.SYS setting up system interrupt stack configuration. The suggested values are: stacks = 9,256 This means that DOS should allocate nine system stacks, each 256 bytes in size. The default for this setting is: stacks = 9,128 Under QDPMI, this may not be sufficient. Novell Netware -------------- QDPMI has the capability to support either 16- or 32- bit DPMI clients. When a 32 bit client is executing, it expects all 32 bits of the processor's 32- bit registers to be preserved across interrupts. There are some device drivers and TSRs that utilize the 80x86's 32 bit registers, but do not preserve them, causing undesirable erratic behavior of 32 bit DPMI clients. A notable example is Novell's LAN WorkPlace for DOS v4.01 (TCPIP.EXE). Running the supplied TSR program LWPFIX.COM after loading the LAN WorkPlace TCPIP driver will prevent this erratic behavior. NOTE: Novell has addressed this problem, and later releases will have the appropriate corrections. Borland C/C++ 3.1 ----------------- Borland's compiler can allocate memory through both EMS and DPMI APIs. Since QDPMI hasn't the means to limit EMS allocation by its clients, it is possible for QDPMI's memory resources to be depleted without QDPMI's knowledge. This can be prevented however by limiting the EMS usage of the compiler through the use of the Borland compile-time switch -Qe=xxxx or -Qe-. The former tells Borland's compiler not to exceed xxxx K of EMS memory for use as a swap buffer. The latter tells the compiler to use NO EMS for swapping purposes when compiling. The recommended setting is -Qe-, as all necessary swapping will be performed by QDPMI. QDPMI Reference --------------- This chapter is the reference guide for command line parameters used with both QDPMI.SYS as well as QDPMI.COM programs. This chapter also explains the way to use the QDPMI environment variable to further control QDMPI's behavior. QDPMI Command Line Parameters ----------------------------- Both QDPMI.SYS and QDPMI.COM respond to the same set of command line parameters. Command line parameters may be used on the QDPMI device driver line in CONFIG.SYS to initially set QDPMI's options. QDPMI.COM may also be used to modify any or all QDPMI's options from the DOS command line at a later time. To use a QDPMI.SYS command line parameter, you type the parameter name on the same line as DEVICE=C:\QEMM\QDPMI.SYS in your CONFIG.SYS file. To use a QDPMI.COM command line parameter you type QDPMI followed by the parameter name at the DOS prompt. You may use an abbreviation instead of the parameter name. The abbreviation for each QDPMI command line parameter is shown below in parentheses after each parameter name. The QDPMI command line parameters are: DPMI (ON) turns DPMI 0.9 services on. This is a default setting. NODPMI (OFF) turns DPMI services off. VMON (VM) turns QDPMI virtual memory on. This is the default setting. VMOFF (NOVM) turns QDPMI virtual memory off. KILLSWAP (KLSW) causes the QDPMI host to delete its virtual memory swap file at the termination of the DPMI client application. This is the default setting. KEEPSWAP (KPSW) causes the QDPMI host not to delete its virtual memory swap file at the termination of the DPMI client application. EXTCHKON (XCHK) causes the QDPMI host to step out of the way for incompatible DOS extenders that prefer to do all of their own DOS extender work in their own way. This is the default setting. EXTCHOFF (NOXCHK) causes the QDPMI host not to step out of the way for incompatible DOS extenders that prefer to do all of their own DOS extender work in their own way. OVLDIR= Specifies where QDPMI will look for its QDPMIVM.OVL file at DPMI client initialization. This defaults to the same directory from which QDPMI.SYS was loaded at system initialization. Under some network implementations such as diskless workstations however, this initial path may cease to exist after the system is initialized. Use this switch tell QDPMI where to look for QDPMIVM.OVL at DPMI client initialization in such cases. The QDPMI Environment Variable ------------------------------ QDPMI looks at an environment variable to determine information regarding its configuration. The environment variable is QDPMI. Its syntax is as follows: SET QDPMI=[MAXLOW ] [MINMEM ] [MAXMEM ] [SWAPFILE [dddd]] NOTE: The environment variable line must appear in your AUTOEXEC.BAT file as one line. The QDPMI environment variable is not required to be set for QDPMI's services to be utilized. QDPMI will use a set of default values in the absence of user specified ones. All individual parameters within the QDPMI environment variable are also optional, and may be specified in any order. MAXMEM is the maximum number of kilobytes of physical memory that will be reserved by QDPMI. This can be any number up to the amount of physical memory available on your system, and will be allocated from VCPI, XMS, extended, and conventional memory resources, in that order. The memory used by QDPMI includes all memory for use by its code, data, and page tables, as well as memory requested for use by the DPMI client application. If MAXMEM is greater than the available physical memory, or greater than external limits placed on extended memory resources by multitaskers such as DESQview, MAXMEM will be adjusted downward to be within those limits. The default value is the total amount of physical memory installed in yours system. If omitted or explicitly set to zero, MAXMEM is set to the largest value supported on your system. This will either be the size of all of your physical memory, or that which is available to the current partition of DESQview, whichever is smaller. MINMEM is the amount of physical memory in kilobytes that will be reserved by QDPMI immediately upon DPMI client application initialization for use by the QDPMI kernel itself. QDPMI will not initialize if less than this amount of memory is available for its use. The default value for MINMEM varies depending on the amount of physical memory installed in your computer, and whether you are using QDPMI's Virtual Memory features. Any attempt to set MINMEM to a value lower than QDPMI's calculated minimum will result in QDPMI ignoring the request, and using its own calculated MINMEM value. MAXMEM must be greater than or equal to MINMEM, regardless of whether it was user specified or internally calculated. If this is not the case, QDPMI will exit with a message indicating that insufficient memory is available for its initialization. The difference between MAXMEM and MINMEM is the amount of memory that will be managed dynamically by QDPMI, and made available to other applications (including other DPMI clients) when freed. This dynamic memory pool is managed through the use of VCPI memory only. MAXLOW is the maximum number of kilobytes of conventional DOS memory allowed to be reserved by QDPMI for use as its memory resources. Setting it to any non-zero value will allow QDPMI to allocate DOS conventional memory for use in its memory pool. Note that QDPMI will only resort to using DOS conventional memory if expanded and extended memory resources are insufficient to satisfy the MINMEM request. The default value is 0. Conventional memory is only used if MINMEM cannot be satisfied from other resources, and only if this value is non-zero. SWAPFILE [] is the base name of the virtual memory swapfile that QDPMI will use, optionally followed by its maximum size in kilobytes. The size of the virtual memory swapfile that you specify may be any value up to 64 megabytes, and defaults to 1MB. Virtual Memory Total Memory Size -------------------------------- The SUM of the value of MAXMEM and the maximum size of the virtual swapfile is the amount of virtual memory (in kilobytes) available to QDPMI client applications when the virtual memory option is enabled. Error Messages -------------- QDPMI may display error messages when trying to load QDPMI or when trying to initialize a DPMI client. In addition, error messages may also be generated by the QDPMI kernel or the DOS extender. QDPMI.COM error messages are as follows: ---------------------------------------- QDPMI: Client already active -- Cannot modify parameters. A DPMI client has spawned COMMAND.COM, and is still active in the current DOS partition. It is inappropriate to change QDPMI parameters while a QDPMI client is currently running. This condition can sometimes be caused by the abnormal termination of a DPMI client. QDPMI: Already supported -- Not reloaded. Another DPMI Host other than Quarterdeck's has been detected. Quarterdeck's QDPMI is not loaded. QDPMI: Version incompatibility error -- Re-install or use same version. This message only appears if the device driver QDPMI.SYS and the utility program QDPMI.COM are not the same version. This is an error in installation or updating. You must re-install QDPMI. QDPMI: Cannot locate QEMM386.SYS Memory Manager -- Not loaded. Quarterdeck's QDPMI Host will only function in conjunction with Quarterdeck's QEMM-386 Memory Manager. QDPMI: Error accessing XDI -- Not loaded. The QDPMI Host has encountered an error initializing its XDI interface and cannot load. QDPMI: Too Many DPMI Processes -- Not loaded. The QDPMI Host has the capability of supporting up to 15 concurrent processes under DESQview and DESQview/X. If there are more than 15 windows on the screen, and a DPMI client is started in the 16th or higher window, the DPMI client will fail to initialize, and QDPMI.COM will display this message if run in this window. QDPMI: Overlay File Path/Name is too long. The QDPMIVM.OVL files (and their paths) are too long. Use a path less removed from the root. QDPMI: Quarterdeck QDPMI Host is not resident. QDPMI.COM issues this message if run without having previously loaded QDPMI.SYS in CONFIG.SYS. QDPMI client initialization messages are as follows: ---------------------------------------------------- QDPMI: Open Error. QDPMI could not open its overlay file QDPMIVM.OVL. You should make sure that it is either in the same directory as QDPMI.SYS, or in the directory specified by the OVLDIR parameter on the QDPMI command line. QDPMI: Processor Error. QDPMI must have an 80386 or higher processor in order to run. QDPMI: Read Error. QDPMI cannot read its overlay file QDPMIVM.OVL. QDPMI: Seek Error. QDPMI can not seek in its overlay file QDPMIVM.OVL. QDPMI: Close Error. QDPMI can not close its overlay file QDPMIVM.OVL. QDPMI: Bad .OVL Error. QDPMIVM.OVL file is corrupted. QDPMI: Exec Error. QDPMI could not transfer control to its overlay. QDPMI: Init Error. QDPMIVM.OVL could not complete its initialization. QDPMI: Mode Error. The QDPMI client is attempting to re-initialize the QDPMI Host in another mode (16/32 bit) than it was originally initialized. This can occur if an attempt is made to start a DPMI client of another "bitness" than the currently running DPMI client. QDPMI: Task Error. The maximum of 15 simultaneous DPMI clients are already running in other DESQview or DESQview/X windows. QDPMI: Version Error. There is a discrepancy between the QDPMI version of the device driver (QDPMI.SYS), and the kernel (QDPMIVM.OVL).