INF: QEMM and 386MAX: Functionality and Compatibility with CV

ID Number: Q75043

3.00 3.10 3.11 3.14

MS-DOS

Summary:

The Quarterdeck Expanded Memory Manager (by Quarterdeck Office

Systems), otherwise known as QEMM386, and 386MAX (by Qualitas) are

memory managers providing support for expanded and VCPI-extended

memory, the High Memory Area (HIMEM), and Upper Memory Blocks for

machines using the 80386 or 80486 processor.

Some customers have reported difficulties loading CodeView versions

3.x into extended memory when running under these managers. This

article deals with the errors, difficulties, and solutions regarding

compatibility issues among CodeView, QEMM, and/or 386MAX.

More Information:

The first thing to check is the version of CodeView in use. CodeView

version 3.0 is not VCPI (Virtual Control Program Interface)

compatible, and therefore cannot be loaded into extended memory when

QEMM or 386MAX is resident. If you are using CodeView 3.0, please

contact Microsoft Product Support Services for an upgrade to a later

version that is VCPI-compatible.

To make CodeView VCPI compatible, a change was necessary to allow

access to the memory manager using that management scheme. Since VCPI

is a superset of LIM 4.0, the first thing CodeView does is make a call

to the LIM driver to determine if it exists. This call actually

attempts to establish a 64K page frame. If this is not possible,

CodeView assumes there is no VCPI driver and looks for other methods

to load itself and the symbol table.

The most common mistake with QEMM is to use either the FRAME=NONE or

the NOEMS switch. In both cases, CodeView can't allocate the 64K EMS

page frame it requires. The same problem occurs when using 386MAX with

the NOFRAME or EMS=0 switch.

The other switches in QEMM and 386MAX are compatible with CodeView.

Care must be taken, however, to ensure that the allocation scheme

leaves enough VCPI memory for CodeView.

For example, if QEMM (or 386MAX) is configured so that there are four

megabytes (MB) of extended memory available and no expanded memory,

and a RAM drive is loaded to take up 3.5 MB, CodeView will not be able

to load because there will not be enough available extended memory.

Note that this is the simplest case and that there are many options

and combinations of options that could cause this type of problem.

The examples below illustrate various command-line options for

CodeView, QEMM, and 386MAX along with the resultant output.

Notes:

1. Version 5.10 of QEMM386 and version 5.10 of 386MAX have been used

for these examples.

2. 386MAX can a command file (386MAX.PRO) to replace command-line

switches. This file contains all the necessary options for 386MAX

to load as the user has defined. For purposes of readability, only

command-line options will be used in the examples.

3. BLUEMAX is a version of 386MAX that runs on a PS/2 and provides

extra capabilities for that platform. For the purposes of this

article, BLUEMAX and 386MAX can be considered identical.

4. Only one memory manager should be present at any one time. These

examples contain the command line and results for both QEMM and

386MAX for the purpose of seeing the result of what each line

contains.

5. All of these examples assume that there is enough expanded or

extended memory to completely load CodeView and the entire

application program. If not, be aware that CodeView will not use

disk overlays to load into conventional memory if it was able to

partially load into any area above the 640K DOS boundary. If an

"Out of Memory" error occurs, a common solution is to use the

CVPACK.EXE utility included with the compiler.

Examples:

CV1301 Error: /X: CPU in protected or virtual mode

--------------------------------------------------

CONFIG.SYS with QEMM -> device=c:\qemm\qemm386.sys NOEMS

CONFIG.SYS with QEMM -> device=c:\qemm\qemm386.sys FRAME=NONE

CONFIG.SYS with 386MAX -> device=c:\386max\386max.sys EMS=0

command line -> cv /x test.exe

CV1304 Error: /E: EMM driver not loaded

---------------------------------------

CONFIG.SYS with QEMM -> device=c:\qemm\qemm386.sys NOEMS

CONFIG.SYS with QEMM -> device=c:\qemm\qemm386.sys FRAME=NONE

CONFIG.SYS with 386MAX -> device=c:\386max\386max.sys EMS=0

command line -> cv /e test.exe

CodeView hang at load time

--------------------------

CONFIG.SYS with QEMM -> device=c:\qemm\qemm386.sys FORCEEMS

CONFIG.SYS with 386MAX -> device=c:\386max\386max.sys NOFRAME

command line -> cv {/x | /e | /d} test.exe

CodeView successfully loaded into extended memory

-------------------------------------------------

CONFIG.SYS with QEMM -> device=c:\qemm\qemm386.sys

CONFIG.SYS with 386MAX -> device=c:\386max\386max.sys

command line -> cv {/x} test.exe

CodeView successfully loaded into expanded memory

-------------------------------------------------

CONFIG.SYS with QEMM -> device=c:\qemm\qemm386.sys

CONFIG.SYS with 386MAX -> device=c:\386max\386max.sys

command line -> cv /e test.exe

CodeView successfully loaded using disk overlays or gives an

"Out of Memory" error for large applications

------------------------------------------------------------

CONFIG.SYS with QEMM -> device=c:\qemm\qemm386.sys NOEMS

CONFIG.SYS with QEMM -> device=c:\qemm\qemm386.sys FRAME=NONE

CONFIG.SYS with 386MAX -> device=c:\386max\386max.sys EMS=0

command line -> cv test.exe

CONFIG.SYS with QEMM -> device=c:\qemm\qemm386.sys

CONFIG.SYS with QEMM -> device=c:\qemm\qemm386.sys NOEMS

CONFIG.SYS with QEMM -> device=c:\qemm\qemm386.sys FRAME=NONE

CONFIG.SYS with 386MAX -> device=c:\386max\386max.sys

CONFIG.SYS with 386MAX -> device=c:\386max\386max.sys EMS=0

command line -> cv /d test.exe

Additional reference words: QEMM-386 386-MAX EMM386 EMM-386