Memory Mgrs

30
2 SYSTEM DATA AND TROUBLESHOOTING 24 MEMORY MANAGERS As personal computers broke the 1MB mark, the problem became utilizing memory over 640KB (conventional memory). For application programs to utilize memory beyond 640KB, a memory manager is required to support the physical RAM present in the system and configure the RAM as “extended” (XMS) or “expanded” (EMS) memory. In general, memory managers provide a series of crucial services to a modern PC: It allows the operating system and applications to access to extended memory (XMS) over 1MB. It allows extended memory (XMS) to simulate expanded memory (EMS), which other- wise would require specialized hardware support. 803 CONTENTS AT A GLANCE Making the Most of Conventional Memory Protect the configuration Optimizations for config.sys Optimizations for autoexec.bat Reviewing your results with MEM Mix and match Adjusting the memory environment for DOS programs under Windows 95 Troubleshooting typical optimization problems Troubleshooting QEMM Troubleshooting HIMEM/EMM386 Troubleshooting 386MAX Further Study

Transcript of Memory Mgrs

Page 1: Memory Mgrs

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

24MEMORY

MANAGERS

As personal computers broke the 1MB mark, the problem became utilizing memory over640KB (conventional memory). For application programs to utilize memory beyond640KB, a memory manager is required to support the physical RAM present in the systemand configure the RAM as “extended” (XMS) or “expanded” (EMS) memory. In general,memory managers provide a series of crucial services to a modern PC:

■ It allows the operating system and applications to access to extended memory (XMS)over 1MB.

■ It allows extended memory (XMS) to simulate expanded memory (EMS), which other-wise would require specialized hardware support.

803

CONTENTS AT A GLANCE

Making the Most of Conventional MemoryProtect the configurationOptimizations for config.sysOptimizations for autoexec.batReviewing your results with MEMMix and matchAdjusting the memory environment for DOS programs under Windows 95

Troubleshooting typicaloptimization problems

Troubleshooting QEMM

Troubleshooting HIMEM/EMM386

Troubleshooting 386MAX

Further Study

Page 2: Memory Mgrs

■ It locates and frees unused memory in the upper memory area (UMA) to make it avail-able for use.

■ It utilizes the high memory area (HMA)—that 64KB segment just above the 1MBmark.

■ It supports the use of shadow RAM, where slower ROM contents are copied to fasterRAM to provide faster system performance.

■ It can rearrange the address order of physical memory in the PC so that faster memoryappears in the lower addresses, a technique known as memory sorting.

■ It can fill in empty addresses below 640KB with memory contents from extended mem-ory (XMS) to utilize the entire 640KB at all times, a technique called backfilling.

As a consequence of these features, use of memory managers offers some significant ad-vantages for a computer; larger applications (or applications with huge volumes of data)and more sophisticated operating systems can be created; extended memory supports theexecution of code beyond 1MB, so programs can be run outside of conventional memory;multiple programs can be loaded into the available RAM space for more effective multi-tasking; and unused space in the UMA and HMA can be loaded with DOS or real-modedevice drivers—freeing more conventional memory for DOS applications. The currentgeneration of memory managers also offer a suite of advanced features and conveniences,such as accelerating software loading and execution times, better memory utilization andperformance reporting, and more aggressive location of unused memory.

Although the current memory managers are compatible with Windows 95, memory man-agers are not as vital as they once were. Windows 95 now incorporates many of the mem-ory-management functions needed by the PC—relegating MS-DOS and third-party memorymanagers to DOS platforms or “game machines,” as well as DOS applications running in aWindows 95 “window.” Although memory managers are well-developed pieces of soft-ware, they are not always as well-behaved as they should be. This chapter presents some tipsfor optimizing your use of memory, and examines a selection of symptoms and solutions forthe three major memory manager families: QEMM, HIMEM/EMM386, and 386MAX.

Making the Most of Conventional MemoryEven under DOS 7.x of Windows 95, DOS applications still depend on an ample amountof conventional memory for proper operation. Freeing conventional memory and loadingreal-mode drivers and DOS into upper memory are still two key objectives of memorymanagement. The memory-management process usually consists of enabling the memorymanagers, then rearranging real-mode software in an optimum fashion. Because every PCconfiguration is different, and can use an incredibly diverse array of software, no single setof rules can ensure optimum memory utilization (even such memory optimizers as DOSMEMMAKER are known to fail under some circumstances). As a consequence, optimiz-ing a PC’s memory is sometimes more of an art than a science. This part of the chapteroutlines the essential concepts of using memory managers, and offers some tips to helpyou utilize memory better.

804 MEMORY MANAGERS

Page 3: Memory Mgrs

PROTECT THE CONFIGURATION

Optimizing memory is largely a matter of tweaking a system’s CONFIG.SYS and AU-TOEXEC.BAT files. Although Windows 95 tries to eliminate them, these startup files arestill the only way to configure a PC for real-mode (DOS) operation. Before you attemptto modify the startup files, you should always make it a point to backup the startup files bycopying CONFIG.SYS and AUTOEXEC.BAT to different file names such as:

C:\> copy config.sys config.bakC:\> copy autoexec.bat autoexec.bak

This creates two “backup” files and allows you to modify the original startup files. If youmake a mistake modifying the startup files, you can always restore the original CON-FIG.SYS and AUTOEXEC.BAT files by re-copying the backup files to the original filenames, such as:

C:\> copy config.bak config.sysC:\> copy autoexec.bak autoexec.bat

Once the files have been restored, you can resume modifying them. If you have a bootdiskette, you should also consider placing a copy of the original startup files on it.

Also make it a point to know the <F8> key. When you see the message: “Starting Win-dows 95,” press <F8> to load a Startup menu. From here, you can control the ways inwhich your system starts. This can be a valuable tool when checking to see just which dri-vers or utilities load (or not). If you’re working on an older DOS/Windows 3.1x platform,use the <F5> key to bypass CONFIG.SYS when the “Starting MS-DOS” message appears,or use <F8> to step through each line in the startup files.

OPTIMIZATIONS FOR CONFIG.SYS

The first step in optimizing your system’s memory is to enable your high memory area. Todo this, you will need to place HIMEM.SYS and EMM386.EXE into your CONFIG.SYSstartup file. From the DOS prompt, start a text editor, such as DOS EDIT, and load yourCONFIG.SYS file. One of the first things that CONFIG.SYS should do is load HIMEMand EMM386, as shown in Fig. 24-1 (this is shown as an example only—your CON-FIG.SYS file might be radically different). Remember that there are a number of com-mand line switches for both HIMEM and EMM386. Depending on the vintage andparticular configuration of your PC, you might need to add one or more switches toachieve proper driver operation. Table 24-1 lists the syntax and command line switchesfor HIMEM, and Table 24-2 lists the syntax and command line switches for EMM386. Ifyou intend to make use of both high memory and any available UMAs, you should use theRAM switch with EMM386.

When MEM /C is run with the CONFIG.SYS file shown in Fig. 24-1, only 441KB of thetotal 640KB conventional memory space is available. Large DOS applications might failto function with so little conventional memory. Now that you know the high memory isactive (thanks to HIMEM and EMM386), you can optimize CONFIG.SYS to free as muchconventional memory as possible.

MAKING THE MOST OF CONVENTIONAL MEMORY 805

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

Page 4: Memory Mgrs

806 MEMORY MANAGERS

device = c:\dos\himem.sysdevice = c:\dos\setver.exedevice = c:\dos\emm386.exestacks = 9,256files = 80buffers = 50lastdrive = Zdevice = c:\sb16\drv\sbcd.sys /D:mscd001 /P:220device = c:\rodent\oldmouse.exe

FIGURE 24-1 A simple,but inefficient,CONFIG.SYS file.

TABLE 24-1 SYNTAX AND COMMAND LINE SWITCHES FOR HIMEM

SYNTAX

device=[drive:][path]himem.sys [/hmamin=m] [/numhandles=n] [/int15=xxxx] [/machine:g][/a2Ocontrol:onloff] [/shadowram:onloff] [/cpuclock:on|off]

Parameters

[drive:][path] Specifies the location of the HIMEM.SYS file.

/hmamin=m Specifies the amount of memory (in kilobytes) that a program must use be-fore HIMEM.SYS permits the program to use the high-memory area. Validvalues for m are 0–63. The default value is 0.

/numhandles=n Specifies the maximum number of Extended Memory Block (EMB) handlesthat can be used simultaneously. Valid values for n are 1–128. The defaultvalue is 32. Each additional handle requires an additional six bytes of resi-dent memory.

/int15=xxxx Allocates the specified amount of extended memory (in kilobytes) for the Inter-rupt 15h interface. Some older programs use a conflicting extended memoryscheme. To use memory allocated by this switch, programs must recognizeVDisk headers. To ensure enough memory is available, add 64 to the valueyou want to specify for xxxx. Valid values for xxxx are 64–65535. If youspecify a value less than 64, the value becomes 0. The default value is 0.

/machine:xxxx Specifies the A20 handler to be used. An A20 handler is a part of yourcomputer that gives it access to the high-memory area. The xxxx value canbe any of the following codes or their equivalent numbers:

Code Number A20 handler

at 1 IBM PC/AT or COMPUADD 386 or JDR 386/33

ps2 2 IBM PS/2 or Datamedia 386/486 or UNISYSPowerPort

ptlcascade 3 Phoenix Cascade BIOS

hpvectra 4 HP Vectra (A and A+)

att6300plus 5 AT&T 6300 Plus

acer1100 6 Acer 1100

toshiba 7 Toshiba 1600 and 1200XE or Toshiba 5100

wyse 8 Wyse 12.5MHz i286 or COMPUADD 386 or Hitachi HL500C or Intel 301z or 302

tulip 9 Tulip SX

zenith 10 Zenith ZBIOS

at 11 IBM PC/AT

at2 12 IBM PC/AT (alternative delay)

css 12 CSS Labs

Page 5: Memory Mgrs

MAKING THE MOST OF CONVENTIONAL MEMORY 807

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

SYNTAX

Code Number A20 handler

at3 13 IBM PC/AT (alternative delay)

philips 13 Philips

fasthp 14 HP Vectra

ibm7552 15 IBM 7552 Industrial Computer

bullmicral 16 Bull Micral 60

dell 17 Dell XBIOS

/a20control:onloff Specifies whether HIMEM.SYS is to take control of the A20 line—even ifA20 was on when HIMEM.SYS was loaded. If you specify /a20control:off,HIMEM.SYS takes control of the A20 line only if A20 was off whenHIMEM.SYS was loaded. The default setting is /a20control:on.

/shadowram:onloff Specifies whether HIMEM.SYS is to switch off shadow RAM used for read-only memory, and add that RAM to its memory pool. If your computer hasless than 2MB of RAM, the default setting is /shadowram:off. This para-meter is supported only on some computers.

/cpuclock:onloff Specifies whether HIMEM.SYS is to affect the clock speed of your com-puter. If your computer’s speed changes when you install HIMEM.SYS,specifying /cpuclock:on might correct the problem. Enabling this switchslows down HIMEM.SYS.

TABLE 24-1 SYNTAX AND COMMAND LINE SWITCHES FOR HIMEM(CONTINUED)

TABLE 24-2 SYNTAX AND COMMAND LINE SWITCHES FOR EMM386

SYNTAX

device=[drive:][path]emm386.exe [on|off|auto] [memory] [w=onlw=off] [mxlframe=addressl/pm-mmm] [pn=address] [x=mmmm-nnnn] [i=mmmm-nnnn] [b=address] [L=minXMS] [a=altregs][h=handles] [d=nnn] [ram] [noems]

Parameters

[drive:l[path] Specifies the location of the EMM386.EXE file.

[onlofflauto] Activates the EMM386.EXE device driver (if set to On), or suspends theEMM386.EXE device driver (if set to Off ), or places the EMM386.EXE de-vice driver in auto mode (if set to Auto). Auto mode enables expandedmemory support only when a program calls for it. The default value is on.Use the emm386 command to change this value after EMM386 hasstarted.

memory Specifies the amount of memory (in kilobytes) that you want to allocate toEMM386.EXE. Values for memory are 16–32768. The default value is256. EMM386.EXE rounds the value down to the nearest multiple of 16. Ifyou are using expanded memory, this value is in addition to the memoryused for low-memory backfilling.

w=onlw=off Enables or disables support for the Weitek coprocessor. The default set-ting is w=off.

Page 6: Memory Mgrs

808 MEMORY MANAGERS

SYNTAX

mx Specifies the address of the page frame. Valid values for x are 1–14. Thefollowing list shows each value and its associated base address in hexa-decimal format (values 10–14 should be used only on old computers with512KB of memory):1 => C000h 8 => DC00h2 => C400h 9 => E000h3 => C800h 10 => 8000h4 => CC00h 11 => 8400h5 => D000h 12 => 8800h6 => D400h 13 => 8C00h7 => D800h 14 => 9000h

frame=address Specifies the page-frame segment base directly. To specify a specific segment-base address for the page frame, use the frame switch and spec-ify the address you want. Valid values for address are 8000h-9000h andC000h-E000h, in increments of 400h.

/pmmmm Specifies the address of the page frame. Valid values for mmmm are8000h, 9000h, and C000h-E000h, in increments of 400h.

pn=address Specifies the segment address of a specific page, where n is the number ofthe page you are specifying and address is the segment address you want.Valid values for n are 0-255. Valid values for address are 8000h-9C00h andC000h-EC00h, in increments of 400h. The addresses for pages 0 through3 must be contiguous in order to maintain compatibility with version 3.2 ofthe Lotus/Intel/Microsoft Expanded Memory Specification (LIM EMS). Ifyou use the mx switch, the frame switch, or the /pmmmm switch, you can-not specify the addresses for pages 0 through 3 for the /pmmmm switch.

x=mmmm-nnnn Prevents EMM386.EXE from using a particular range of segment ad-dresses for an EMS page. Valid values for mmmm and nnnn areA000h–FFFFh and are rounded down to the nearest 4KB boundary. The xswitch takes precedence over the i switch if the two ranges overlap.

i=mmmm-nnnn Specifies a range of segment addresses to be used (included) for an EMSpage or for RAM. Valid values for mmmm and nnnn are A000h–FFFFh andare rounded down to the nearest 4KB boundary. The x switch takes prece-dence over the i switch if the two ranges overlap.

b=address Specifies the lowest segment address available for EMS “banking” (swappingof 16KB pages). Valid values are 1000h–4000h. The default value is 4000h.

L=minXMS Ensures that the specified amount (in kilobytes) of extended memory willstill be available after you load EMM386.EXE. The default value is 0.

a=altregs Specifies how many fast alternate register sets (used for multitasking) youwant to allocate to EMM386.EXE. Valid values are 0–254. The defaultvalue is 7. Every alternate register set adds about 200 bytes to the size inmemory of EMM386.EXE.

h=handles Specifies how many handles EMM386.EXE can use. Valid values are2–255. The default value is 64.

d=nnn Specifies how many kilobytes of memory should be reserved for buffereddirect memory access (DMA). Discounting floppy-disk DMA, this valueshould reflect the largest DMA transfer that will occur while EMM386.EXEis active. Valid values for nnn are 16–256. The default value is 16.

ram Provides access to both expanded memory and the upper memory area.

noems Provides access to upper memory area, but prevents access to expandedmemory.

TABLE 24-2 SYNTAX AND COMMAND LINE SWITCHES FOR EMM386 (CONTINUED)

Page 7: Memory Mgrs

Eliminate or disable unnecessary entries The first and simplest step in freeingconventional memory is to remove any entries that are no longer being used. For example,when old peripherals are upgraded, the old device driver should be removed and the new oneloaded. Look through the CONFIG.SYS file and erase any obsolete entries. Suppose forFig. 24-1 that the file oldmouse.exe was an old mouse driver that was no longer needed. Youcan simply erase the entry. If you are not certain whether the entry is needed or not, you candisable the entry (rather than remove it) by adding the term REM before the entry, such as:

REM device = c:\rodent\oldmouse.exe

This effectively REMarks-out the entry. If you find that you need the entry after all, youcan remove the REM statement later and re-enable the entry without having to type it inagain from scratch (this feature goes a long way toward minimizing typing errors).

Allocate files and buffers sparingly The FILES entry defines how many files MS-DOS can have open at one time. The BUFFERS entry sets the number of 500-byte buffersthat MS-DOS reserves for data transfer to and from disk. Large numbers of FILES andBUFFERS wastes conventional memory. Be sure that the number of FILES andBUFFERS allocated for your system are sufficient without being excessive. For example,if you have been using a complex application that required 80 files and 50 buffers, but theapplication has been removed from your system, you can return the number of FILES andbuffers to a lower level (60 FILES and 40 BUFFERS are usually typical for most Win-dows 95-configured systems) like:

files = 60buffers = 40

Tighten the “LASTDRIVE=” entry DOS allows up to 26 letters to be used as logicaldrive references. In many cases, the “LASTDRIVE=” function is set to Z: (as in Fig. 24-1),but the actual last drive to be enabled might only be E:, H:, or K:. Each letter requiresabout 100 bytes. Use a smaller letter that more closely reflects the true last drive. For thisexample, you might change the LASTDRIVE reference to M:, such as:

lastdrive = M

Set the stacks properly If you are running DOS only, you can usually remove the in-terrupt stack reference entirely or set it to 0,0. For Windows and Windows 95 systems,however, the setting of 9,256 is adequate for most systems.

Relocate DOS MS-DOS is one of the largest files to occupy conventional memory, soone of your priorities in optimizing conventional memory should be to move DOS to ei-ther an available part of the upper memory area (UMA), or to the high memory area(HMA) using the “dos=” command in CONFIG.SYS. Remember that you will first needto load HIMEM in order to load DOS into high memory, and use the RAM switch withEMM386 if you plan to try DOS in the UMA. Be sure the following line is added after theEMM386.EXE entry in CONFIG.SYS:

dos=umb,high

MAKING THE MOST OF CONVENTIONAL MEMORY 809

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

Page 8: Memory Mgrs

If you do not wish to try putting DOS in the UMA, you can omit the “umb” portion ofthe line. Figure 24-2 shows our refined CONFIG.SYS file beginning to take shape.

Make use of DEVICEHIGH The “DEVICEHIGH=” function allows you to placemost device drivers into the UMA where otherwise they would be loaded into conven-tional memory. There are only a few rules to keep in mind when using DEVICEHIGH.First, you must add the “umb” reference to the “dos=” function in order to use DE-VICEHIGH at all. Second, you cannot use DEVICEHIGH until your memory man-agers are loaded, so HIMEM and EMM386 must always be loaded in conventionalmemory with the ordinary DEVICE function (Fig. 24-2). Third, if you have any DE-VICE references placed before your memory managers (such as the SETVER.EXE ref-erence placed before EMM386.EXE in Fig. 24-1), relocate the statement(s) after thememory managers (Fig. 24-2).

You can then use the DOS MEM function to check the new amount of free conventionalmemory. After booting a system using the CONFIG.SYS file of Fig. 24-2, free conven-tional memory reported by MEM (the “Largest executable program size” entry) rose to555KB. For only a few minutes worth of work, the system picked up over 114KB of con-ventional memory.

OPTIMIZATIONS FOR AUTOEXEC.BAT

Working with the AUTOEXEC.BAT system startup file is a bit easier than dealing withCONFIG.SYS. AUTOEXEC.BAT is used to set system variables and to start any non-crucial device drivers or TSRs (such as mouse drivers and caching programs) that mightbe needed to streamline the system. Before you attempt to work with the AUTO-EXEC.BAT file, remember to make a backup of the original file, just in case you get intotrouble. If you need guidance making a backup of AUTOEXEC.BAT, see the section“Protect the configuration.” Start a text editor and load the AUTOEXEC.BAT file.

Eliminate unnecessary entries This is the most common method of streamliningan AUTOEXEC file. As applications come and go on your system, you will likely be leftwith a number of system variables that are no longer used, as well as very long PATHstatements that you probably do not need. You might also find obsolete or unused driversand TSRs in AUTOEXEC.BAT that can be removed without problems. If you are not surewhether an entry can be removed safely, place a REM statement in front of the entry. Thiseffectively REMarks-out (disables) the entry without removing it. If you find that you

810 MEMORY MANAGERS

device = c:\dos\himem.sysdevice = c:\dos\emm386.exe ramdos = umb,highstacks = 9,256files = 60buffers = 40lastdrive = Mdevicehigh = c:\sb16\drv\sbcd.sys /D:mscd001 /P:220devicehigh = c:\dos\setver.exe

FIGURE 24-2 A reasonably optimized CONFIG.SYSfile.

Page 9: Memory Mgrs

need the entry after all, you can simply remove the REM statement later to re-enable theentry.

Make use of LOADHIGH The “LOADHIGH=” function is used to load a programinto the UMA; otherwise, it would be loaded into conventional memory. As with DE-VICEHGH, there are some rules that must be followed in order to use LOADHIGHsuccessfully. The “umb” reference must be added to the “dos=” statement in CON-FIG.SYS, and the LOADHIGH function can not be used until the memory managersare loaded in CONFIG.SYS. A typical application of LOADHIGH is shown in thesample AUTOEXEC.BAT file of Fig. 24-3. It is important to note that DOS does notreport whether a LOADHIGH was successful or not. If a file cannot be loaded into up-per memory, it will be loaded into conventional memory. Keep in mind that you canuse the letters “lh” instead of LOADHIGH.

REVIEWING YOUR RESULTS WITH MEM

DOS offers the MEM function, which provides a comprehensive breakdown of memory inthe system and how it is used. You can use the MEM function before and after an opti-mization to see the results of your work. Figure 24-4 illustrates a typical memory reportusing the /C switch. Because this chapter is primarily concerned with freeing as muchconventional memory as possible, you should be most concerned with the third line fromthe bottom: “Largest executable program size.” The objective is to make this number aslarge (as close to 640KB) as possible.

MIX AND MATCH

Chances are that not all of the drivers or TSRs you’ve attempted to load high (with DE-VICEHIGH or LOADHIGH) will actually fit into the available space in the UMA. Thetrick to “optimizing” memory is to fit “as much as possible” into the UMA. Once you re-view the status of your memory with MEM (as in Fig. 24-4), you can then return to yourtext editor and continue tweaking the CONFIG.SYS and AUTOEXEC.BAT files to loadother drivers high. For Fig. 24-4, the MEM report indicates that a total of 59KB of “Up-per” memory is available. It also reports that 57KB of that space has been utilized by DOSand other drivers—specifically SBDC (a Sound Blaster CD driver), SETVER, andMSCDEX. This leaves only 2KB (1744 bytes) available. If you find a utility in the MEMreport that uses less than 1744 bytes, you might also be able to load that driver high, anduse the remainder of free upper memory.

MAKING THE MOST OF CONVENTIONAL MEMORY 811

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

set blaster = A220 I5 D1 H5 P330 T6set sound = c:\sb16prompt $p$gloadhigh c:\sb16\sb16set /M:220 /VOC:220 /CD:220 /MIDI:220 /LINE:220 /TREBLE:0loadhigh c:\sb16\sbconfig.exe /Sloadhigh c:\sb16\drv\mscdex.exe /D:MSCD001 /V /M:15loadhigh c:\dos\smartdrv.exeloadhigh c:\mouse\mouse.comloadhigh c:\dos\share.exe /L:100

FIGURE 24-3 A typical AUTOEXEC. BAT file using the LOADHIGH command.

Page 10: Memory Mgrs

ADJUSTING THE MEMORY ENVIRONMENT FOR DOS PROGRAMS UNDER WINDOWS 95

Windows 95 provides the ability to run MS-DOS programs in a “DOS window.” This re-quires you to configure a suitable environment for the DOS program. You can modify theDOS environment using the following steps:

1 On the desktop, right-click the MS-DOS icon, then select Properties.2 Click the Program tab, then click the Advanced button.3 The Advanced program settings dialog appears (Figure 24-5).4 Now you can adjust the CONFIG.SYS and AUTOEXEC.BAT attributes that you want

to use when running the MS-DOS window.

TROUBLESHOOTING TYPICAL OPTIMIZATION PROBLEMS

In an ideal world, you should be able to load DOS, TSRs, and device drivers into the UMAand high memory without any difficulty. But in the practical PC world, many situations

812 MEMORY MANAGERS

Name Total = Conventional + Upper Memory------- ------------- ---------------- ----------------MSDOS 17149 (17K) 17149 (17K) 0 (0K)HIMEM 1168 (1K) 1168 (1K) 0 (0K)EMM386 4144 (4K) 4144 (4K) 0 (0K)COMMAND 2912 (2K) 2912 (2K) 0 (0K)SMARTDRV 28816 (28K) 28816 (28K) 0 (0K)MOUSE 24560 (24K) 24560 (24K) 0 (0K)SHARE 7648 (7K) 7648 (7K) 0 (0K)SBCD 11584 (11K) 0 (0K) 11584 (11K)SETVER 640 (1K) 0 (0K) 640 (1K)MSCDEX 46576 (45K) 0 (0K) 46576 (45K)Free 570432 (557K) 568688 (555K) 1744 (2K)

Memory Summary:

Type of Memory Total = Used + Free--------------- -------------- -------------- ---------------Conventional 655360 (640K) 86672 (85K) 568688 (555K)Upper 60544 (59K) 58800 (57K) 1744 (2K)Adapter RAM/ROM 393216 (384K) 393216 (384K) 0 (0K)Extended (XMS)* 15668096 (15310K) 2610048 (2549K) 13058048(12752K)--------------- -------------- -------------- ---------------Total Memory 16777216 (1638K) 3148736 (3075K) 13628480(13309K)

Total under 1MB 715904 (699K) 145472 (142K) 570432 (557K)

Total Expanded (EMS) 16056320 (15680K)Free Expanded (EMS)* 13303808 (12992K)

* EMM386 is using XMS memory to simulate EMS memory as needed. Free EMS memory may change as free XMS memory changes.

Largest executable program size 568592 (555K)Largest free upper memory block 1296 (1K)MS-DOS is resident in the high memory area.

FIGURE 24-4 A breakdown of memory utilization using the DOS MEM /Cfunction.

Page 11: Memory Mgrs

can prevent a program from being relocated out of conventional memory. In many cases,the result is harmless—the program will simply load into conventional memory as it hadbefore. In other cases, however, system operation can be adversely affected when pro-grams are relocated. The following symptoms explain a number of common problems re-lated to memory optimization.

Symptom 24-1. You see an error message from a driver or TSR when at-tempting to relocate it This is not necessarily a problem. It might simply be that notenough memory is available in the UMA to handle the program you are trying to relocate.Try re-arranging the order in which the drivers or TSRs are loaded. Also, the availablespace in the upper memory area will vary, depending on how the PC is configured. A PCwith a great many expansion boards and expansion BIOS ROMs might not leave enoughupper memory to hold more than a couple of drivers or TSRs. Little else can be done withsuch a problem.

Symptom 24-2. The system locks up when a program is relocated Not allsoftware is suitable for operation in the UMA. Check the screen messages carefully as thePC initializes and attempt to determine the last program to load successfully before a faultoccurs. If you can find the fault, it is a simple matter to remove the DEVICEHIGH= state-ment and replace it with the DEVICE statement. This will load the uncooperative program

MAKING THE MOST OF CONVENTIONAL MEMORY 813

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

FIGURE 24-5 The Advanced Program Settings dialog.

Page 12: Memory Mgrs

in conventional memory. Remember that it might be necessary to boot the system from abackup or alternate boot disk so that you are able to use a text editor to make and save sucha correction.

If you are unable to determine the point at which the system locks up, start with the lastDEVICEHIGH statement in the CONFIG.SYS file and change each one to DEVICE. Re-boot the PC after each change is made. The last line to be changed before system opera-tion returns is the problem. You can then leave that line (to load into conventionalmemory) and return all subsequent lines to the DEVICEHIGH function.

Symptom 24-3. A device driver small enough for the available UMA failsto load there Some device drivers expand when they are loaded into memory. In mostcases, the program will be loaded into conventional memory. You can find the actualamount of space a driver needs by allowing the driver to load into conventional memory,then using the MEM /C command to see the file and its corresponding file size—this willbe the true amount of memory needed by the driver. You can then try loading the driverwith DEVICEHIGH using its “size=” switch.

Symptom 24-4. A program works erratically or improperly when loadedinto the UMA Some device drivers simply do not work well (or at all) in the UMA. Itcould be that the program needs a certain amount of memory above it or the driver doesnot recognize addresses in the UMA. In either case, the offending program should beloaded into conventional memory. If the offending program is being loaded from CON-FIG.SYS, change its DEVICEHIGH statement to DEVICE. If the problem is occurring inAUTOEXEC.BAT, remove the LOADHIGH (or “lh”) statement.

Symptom 24-5. Nothing is being loaded into the UMA You can see this by look-ing at the MEM report. Chances are that you have missed a configuration step, which ispreventing your system from using the UMA. Check the following items. First, checkCONFIG.SYS to see that the “dos=umb” or “dos=umb,high” statement is included after thememory managers are loaded. Second, check that HIMEM and EMM386 are loaded usingthe DEVICE statement, rather than the DEVICEHIGH statement. HIMEM should beloaded before EMM386. Also see that the EMM386 entry is using the “noems” or “ram”switch. This configuration should enable use of the UMA. At this point, simply be sure thatyou are using DEVICEHIGH statements for any CONFIG.SYS device drivers to be loadedin the UMA, and LOADHIGH statements for any AUTOEXEC.BAT device drivers.

Troubleshooting QEMMSymptom 24-6. The message appears: “Address wrap at xxxx” This mes-sage is not really an error, but it means that QEMM’s SCANMEM feature has detectedthat your PC’s address space is smaller than the 4GB that the processor can address.

Symptom 24-7. The error appears: “NOUSERAM=xxxxx-yyyyy” This error in-dicates that QEMM’s SCANMEM feature does not detect physical memory in the addressrange “xxxxx-yyyyy”—even though your system’s BIOS has reported enough extended

814 MEMORY MANAGERS

Page 13: Memory Mgrs

memory (XMS) to fill these addresses. If you see this message, use your PC’s CMOS setupto reconfigure the machine so that the BIOS reports extended memory properly.

Symptom 24-8. The error appears: “Invalid USERAM due to memorycache!” This error means that QEMM’s SCANMEM feature has detected that the“USERAM=xxxxx-yyyyy” parameter that it last printed to the display is invalid and shouldnot be used. You should ignore only the last USERAM message printed to the screen—previous USERAM messages are valid. This error might occur if an unusual memorycache architecture makes the contents of memory appear to be variable to SCANMEM.

Symptom 24-9. QEMM 8.0x refuses to function properly under Windows95 on an IBM ThinkPad The problem is with the BIOS on IBM ThinkPads runningWindows 95. Call the IBM BBS at 919-517-0001 to download TPWIN95.EXE. This fileexplains the solution, and provides a patch for the IBM BIOS problem.

Symptom 24-10. The error appears: “QEMM386: Cannot load becausethere is not enough memory” This error message can appear for several differentreasons, but it often occurs on machines with a total of 1MB of RAM (640K conventional+ 384K extended). When QEMM386 starts, it finds all of the memory in your system andputs it into one big pool. Then it checks the parameters that were specified in theQEMM386 command line in the CONFIG.SYS file. If not enough memory is available toprovide all of the services requested by the user (as well as those that QEMM386 performsby default), QEMM386 will terminate with this error message.

Remove any EXTMEM (EXT) or MEMORY (MEM) parameters that might exist on theQEMM386.SYS command line (these parameters can easily prevent QEMM from loadingwhen set incorrectly). Supply QEMM386 with parameters that will cause it to use lessmemory—these include NOFILL (NO), NOROM (NR), and MAPS=0. If you have spec-ified the ROM parameter, remove it. Also, you might need to exclude some of your usablehigh RAM areas. On an EGA/VGA system, try X=B000-B7FF. On a Hercules system,the NV parameter should be sufficient. If your system uses shadow RAM, QEMM386 canusually use it also, so enabling the shadow RAM is a good idea when this message ap-pears. Of course, the preferable solution to this problem is to install more memory in thecomputer. This allows QEMM386 to perform all of its requested functions, while alsoproviding more expanded memory for applications that need it.

Symptom 24-11. The error appears: “QEMM386: Cannot load because theprocessor is already in Virtual 86 mode” The Intel i386 and later processors canrun in one of three different modes: real-mode, protected mode, and virtual 8086 mode.When QEMM386 starts up, its default settings tell it to place the processor in Virtual 86mode. However, QEMM386 will not load if some other program (i.e., some other mem-ory manager) has already done this.

Check to be sure that QEMM386 is the first line in your CONFIG.SYS file. If not, movethe QEMM386 command line to the beginning of the CONFIG.SYS file, and see ifQEMM386 will load. If QEMM386 still refuses to load (or it was already the first pro-gram to load in CONFIG.SYS), then you should check your machine’s BIOS settings formemory-management features that might have to be disabled.

TROUBLESHOOTING QEMM 815

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

Page 14: Memory Mgrs

Symptom 24-12. The error appears: “QEMM386: Cannot load because anexpanded memory manager is already loaded” Only one expanded memorymanager can be running on the computer at any given time. When QEMM386 initializes,it checks to see if another expanded memory manager has already been loaded into the sys-tem. If it detects the presence of such a memory manager, it will abort with this error mes-sage, rather than attempt to install itself. Because QEMM386 is designed to provide all ofthe features you need in an expanded memory manager, the old expanded memory man-ager is no longer needed. Check your CONFIG.SYS for another expanded memory man-ager or place QEMM386 on the first line of the CONFIG.SYS (expanded memorymanagers tend to have the letters “EMM” or “EMS” in their names). If you see a line thatappears such as:

DEVICE=C:\DOS\EMM386.EXEDEVICE=C:\REMM.SYSDEVICE=C:\EMM.SYSDEVICE=C:\EMS.SYSDEVICE=C:\CEMM.EXE

remove or “REMark-out” the line from the CONFIG.SYS file.

Symptom 24-13. The error appears: “QEMM386: Unknown MicrochannelAdapter ID: XXXX” On MicroChannel (MCA) computers, each installed adapter hasits own ID number. This number is a four-digit alphanumeric code (“XXXX”). WhenQEMM386 initializes during boot-up, it notes the names of all of the adapters that are pre-sent and compares them to a list of adapters contained in its MCA.ADL file. If an adapteris present that is not listed in the MCA.ADL file, QEMM386 will display the error mes-sage. You’ll need to add the adapter ID information to your existing .ADL file or updatethe .ADL file by downloading the latest version from Quarterdeck’s BBS (573-875-0503)or Web site (http://www.quarterdeck.com).

Symptom 24-14. The error appears: “QEMM386: Cannot find file MCA.ADL”The QEMM386.SYS device driver is reporting that it cannot find the MCA.ADL file thatit uses to determine memory locations used by adapter cards in MicroChannel (MCA) ma-chines. QEMM386.SYS looks for MCA.ADL in the directory from which it was loadedin the CONFIG.SYS file. For example, if your CONFIG.SYS contains a line that reads:

device=c:\qemm\qemm386.sys

QEMM will look in the C:directory for the MCA.ADL file. Ensure that the MCA.ADLfile is located in the directory that is specified on the QEMM386.SYS device line in yourCONFIG.SYS file.

Symptom 24-15. The error appears: “QEMM38452 Cannot load becausethis is not an 80386” When QEMM386 initializes, it checks the machine to ensure thata 386/486 processor is present. QEMM386 cannot run on 80286, 8088, or 8086 machines.If QEMM386 displays this error on a 386/486 machine, you should re-install QEMM386.If the message still appears, you should obtain a new copy of QEMM386 and try again. Ifyou have a 386 add-in board, this error message might appear if QEMM386.SYS appears

816 MEMORY MANAGERS

Page 15: Memory Mgrs

in the CONFIG.SYS file before the driver for your particular 386 add-in board. Put theadd-in board’s driver before QEMM386.SYS in the CONFIG.SYS and the problemshould go away.

Symptom 24-16. The error appears: “QEMM386: Cannot load becausethere is no room for a page frame” To create and utilize expanded memory,QEMM386 must create a page frame that is 64K in size. By default, QEMM386 attemptsto put the page frame between A000h (640K) and F000h (960K). However, some config-urations prevent QEMM386 from placing a page frame above A000h by splitting or frag-menting the unused areas above A000h into chunks that are less than 64K in size. IfQEMM386 cannot place the page frame above A000h, it will attempt to place it in con-ventional memory. When it cannot create a page frame at all, QEMM386 will display thiserror message.

Try re-arranging any adapters so that a 64K area above A000h is unused. This might in-volve changing physical switch settings on the adapters (reconfiguring the adapterROMs). On PS/2 and other MicroChannel (MCA) machines, this will entail using the ref-erence diskette. If rearranging the adapter locations above A000h is not possible, removeany exclusions (X=xxxx-xxxx) statements that reference areas between 0000h and 9FFFh.

Symptom 24-17. The error appears: “QEMM386: Cannot load becauseQEMM is already loaded” QEMM386 is a “control program”—that is, softwarewhich oversees virtually all aspects of the computer’s operation. By definition, only onecontrol program can be in charge of the system at any given time. As a result, QEMM386cannot be loaded on top of itself. QEMM386 is intelligent enough to detect its own pres-ence while loading. If it sees that it has already been loaded, it will abort with this errormessage. This error will only result if you have multiple lines in your CONFIG.SYS filethat load the QEMM386.SYS device file. By removing all but one of these lines, youshould correct the problem.

Symptom 24-18. The error appears: “QEMM386: Disabling StealthROM:Fbecause the page frame does not overlap any ROM” QEMM’s “stealth tech-nology” (introduced with QEMM386 version 6.0) effectively “hides” ROM areasabove 640K and allows them to be used as either high RAM or part of the EMS pageframe. To use the STEALTHROM:F feature, the page frame must be located atop a“stealthed” ROM area. By default, QEMM will do its best to place the page frameproperly. However, if the page frame has been explicitly set (by using QEMM’sFRAME= parameter) at an address that is not occupied by a ROM (or if all ROMS havebeen excluded with the X= parameter), QEMM will disable ST:F and continue. Thismight result in an overall reduction of the amount high RAM created by QEMM386.Remove the FRAME= parameter from your QEMM386.SYS command line in yourCONFIG.SYS file. If no FRAME= parameters are in the command line, check for ex-clusions (EXCLUDE= or X= parameters) that might be “covering” ROM areas. Re-move the exclusions and try again.

Symptom 24-19. The error appears: “QEMM386: Disabling StealthROM:Mbecause there is no page frame” A “page frame” is required to use the ST:M pa-

TROUBLESHOOTING QEMM 817

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

Page 16: Memory Mgrs

rameter and take full advantage of QEMM’s stealth feature. Check your QEMM386.SYSdevice line in your CONFIG.SYS file for the following parameters:

FRAME=NONE (or FR=NONE)NOEMSFRAMELENGTH=x (or FL=x)—where “x” is a value less than 4

If your QEMM386.SYS device line contains any of these parameters, Stealth will be au-tomatically disabled. To use Stealth, remove the appropriate parameters, save yourchanges to CONFIG.SYS, and try again.

Symptom 24-20. The error appears: “QEMM386: Disabling stealth be-cause QEMM could not locate the ROM handler for INT xx” When usingstealth features, QEMM386 must monitor some interrupts at all times. When these inter-rupts have been diverted by another program, QEMM386 will disable stealth features. Asa result, QEMM386 should usually be loaded on the first line of your machine’s CON-FIG.SYS file. This is practical in the vast majority of system configurations. However, itis sometimes desirable to load other device drivers before QEMM386.SYS. When doingthis, some device drivers might make it impossible for stealth to “see” all of the activity inthe machine—and problems can result.

If possible, place the QEMM386.SYS device line at the beginning of your CONFIG.SYSfile. If this is not possible, use HOOKROM.SYS (included with QEMM386 version 6.0and later). This device driver must be placed at the beginning of the CONFIG.SYS file.HOOKROM.SYS acts as a secretary for QEMM386, noting the state of the machine asCONFIG.SYS is processed, then passing these notes to QEMM386 so that it can operateproperly with stealth features active.

Symptom 24-21. The error appears: “Cannot load because QEMM is notregistered Run the INSTALL program to register” The files on the QEMM386product diskette must be installed by running the INSTALL program—they will not func-tion properly when copied over by the DOS COPY command. Run the INSTALL pro-gram from the original QEMM386 product-distribution diskette.

Symptom 24-22. You see the errors: “CONTEXTS is no longer a QEMM pa-rameter!,” or “NAMES is no longer a QEMM parameter!” QEMM386 versions4.23 and earlier featured a CONTEXTS parameter that allowed users to specify the maxi-mum number of mapping contexts that QEMM386 could save at one time. Mapping con-texts are now determined by the number of HANDLES provided by QEMM386 (rangingfrom 16 to 255—64 by default). Similarly, it was determined that the function of theNAMES parameter (also from QEMM386 versions 4.23 and earlier), which specified themaximum number of named handles, could be included into the HANDLES parameter.As a result, the CONTEXTS and NAMES parameters were abandoned in QEMM386 ver-sion 5.0 and later. Remove the CONTEXTS=xxx and NAMES=xxx parameters from yourQEMM386.SYS command line in the CONFIG.SYS file.

Symptom 24-23. The error appears: “LOADHI: The high memory chain iscorrupted” QEMM386 uses a collection of high memory areas called a memory chain

818 MEMORY MANAGERS

Page 17: Memory Mgrs

to keep track of the TSRs and device drivers that are loaded high by the LOADHI pro-grams. If the conflict is in high memory, this chain can become corrupted. This error mes-sage is usually accompanied by an address (e.g., C800h). You can frequently resolve theconflict with an exclusion on the QEMM386 command line in the CONFIG.SYS file. Itis also possible that other drivers or programs that are being loaded in the CONFIG.SYSor AUTOEXEC.BAT might be corrupting the high memory chain—in which case youshould disable all device drivers or TSRs that aren’t absolutely vital to your machine’s op-eration, then re-enable each line—one at a time—rebooting each time you make a change,until the conflicting driver or TSR is discovered.

Symptom 24-24. The error appears: “LOADHI: Cannot write to log file”This error usually appears when a copy of the QEMM386.SYS device driver is in the rootdirectory of the hard drive, as well as in the sub-directory. This can cause confusion whenloading high. Be sure that QEMM386.SYS is only found in the sub-directory, and that theQEMM386 device line in the CONFIG.SYS file specifically points to that sub-directorysuch as:

device=c:\qemm\qemm386.sys

Symptom 24-25. The error appears: “Stealth ROM is being disabled be-cause it cannot find ROM handler 05 76” This error indicates a stealth-compati-bility problem with QEMM 8.0x. To work around this problem, exclude stealth featuresfrom the indicated memory area or turn off stealth features entirely.

Symptom 24-26. The system will hang when attempting to use ColoradoTape Backup Some implementations of shadow RAM do not allow QEMM to reclaimthem properly. This can manifest itself in a number of ways—including the tape backupworking perfectly with QEMM 7.0x, but failing with QEMM 7.5x. Add the SH:N switchto the QEMM386.SYS command line in the CONFIG.SYS.

Symptom 24-27. There is no specific error message, but Optimize won’tcomplete You are running Ontrack’s Disk Manager overlay program with QEMM 8.0x.To work around this problem, move the DMDRVR.BIN file in CONFIG.SYS so it directlyprecedes the QEMM386.SYS command line. Optimize should now complete normally.

Symptom 24-28. After Optimize is complete, you see the error: “Fixeddisk parameter error or BIOS error” This type of problem often occurs when us-ing QEMM 8.0x on Compaq Prolinea 5120 systems. You can usually work around thisproblem by adding the CF:N and BE:N switches to the QEMM386.SYS command line inyour CONFIG.SYS (you can do this using QSETUP), then re-run Optimize.

Symptom 24-29. Optimize won’t complete on a PC with a Plextor 6X CD-ROM and Adaptec 1515 SCSI controller This is a known problem with QEMM8.0x and the ASPI2DOS.SYS SCSI driver. This adapter’s drivers will only work with thefollowing configurations: (1) with the ST:M switch, load the ASPI driver after QEMM—in this configuration, QEMM will optimize and load the driver high: (2) with the ST:F

TROUBLESHOOTING QEMM 819

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

Page 18: Memory Mgrs

switch, load the ASPI driver before QEMM with the /u and /p140 switches added to theASPI2DOS.SYS driver line.

Symptom 24-30. An NEC UltraLite Versa PC suffers Exception 13 errorsin the Exxxh range You might also find that Windows 3.1x loads PROGMAN, thendrops back to the “C:” prompt and hangs up. The problem is caused by a memory conflict,and can usually be corrected by adding an exclusion (X=E000-EFFF) on the QEMM 7.0command line.

Symptom 24-31. A Philips CD Recorder (i.e., CDD200) fails to function ifyou put the USERAM=1M:32M parameter on the QEMM386.SYS line inCONFIG.SYS You find this problem most readily with Compaq systems. Apparently,the Corel CD Creator software (provided by Adaptec) is not compatible with Compaq’sCPQCFG Plug-and-Play (PnP) configuration manager. You need to turn off the PnPswitch on the Adaptec SCSI (AHA1535) board and run the CMOS configuration editor.You’ll need to specify the exact parameters (addresses) for your Adaptec SCSI board.

Symptom 24-32. QEMM 8.0x refuses to complete an optimization on aCompaq computer You are possibly having a conflict with some of the built-in Com-paq BIOS features. Use the following switches in the QEMM command line in CON-FIG.SYS to get around the problems:

■ CF:Y or :N This enables or disables all three Compaq features: Compaq EGA ROM,Compaq Half ROM, and Compaq ROM Memory. By default, all are enabled. CF:Yenables all features and CF:N disables all features.

■ CER:Y or :N This enables or disables Compaq EGA ROM. Disabling this can require32KB of upper memory addresses on some Compaq computers. However, QEMMcannot be turned off if this feature is enabled.

■ CHR:Y or :N This enables or disables Compaq Half ROM. Disabling this can require32KB of upper memory addresses on some Compaq computers.

■ CRM:Y or :N This enables or disables the Compaq Memory ROM. QEMM cannotbe turned off if this feature is enabled.

Symptom 24-33. XtraDrive cannot be installed on the desired drive Theerror appears: “Drive 1 is being controlled by a program that appropriates INT13.” Thisoften occurs when using QEMM386 in the stealth mode. Try removing the ST:M or ST:Fparameters from the QEMM386 command line, and try to install it again (this only needsto be removed during the installation of XtraDrive).

Symptom 24-34. QEMM cannot be installed on a system with XtraDriveWhen you install QEMM386 on a system that has XtraDrive already installed, you get a

820 MEMORY MANAGERS

The NEC UltraLite Versa has the video ROM in E000h-E7FFh. It has additional ROM inE800h-EFFFh (power-management code). QEMM detects the video ROM properly andrequires no exclusion for it, but QEMM maps over E800h-EFFFh. So, this does requirean exclusion if you wish to use the power-management features of the system.

Page 19: Memory Mgrs

system lockup or Exception 13 error when you reboot the machine (and the QEMM386loading process starts). You need to add an exception to the QEMM command line. Sim-ply reboot without QEMM, edit the CONFIG.SYS file and add X=9000-9FFF to theQEMM command line. Save your changes and restart the system again.

Symptom 24-35. The XtraDrive device driver cannot be installed into highRAM This is a known problem with SCSI bus mastering controllers and XtraDrive. Evenwith double-buffering, you will not be able to load XtraDrive into high RAM when usinga SCSI bus-mastering device. This is not really a QEMM memory-manager issue, but aproblem with XtraDrive.

Symptom 24-36. The error appears: “This program is attempting to ac-cess the disk via the page frame” This is often a problem with the EMS XtraDrivedisk cache when using QEMM in the stealth mode. You cannot use the XtraDrive EMScache with QEMM. You must disable the XtraDrive cache (a DBF=2 parameter will notwork on the QEMM command line).

Symptom 24-37. Windows 95 hangs on the opening logo screen or yourvideo display appears distorted This usually happens after installing QEMM 8.0x.In virtually all cases, this type of problem is caused by QEMM mapping program memoryacross some portion of the video memory area. A memory exclusion is required to correctthe issue. Start by excluding the address range A000-C7FF. If the problem is solved, youcan try reducing the exclude-statement range to further pinpoint the exact video range.

Symptom 24-38. After accepting the Optimize results, the system getscaught in a loop and eventually stops in Windows-protection fault 14 Thiskind of problem can occur with QEMM 8.0x, which is Windows 95 compliant. To workaround this problem, add SH:N and RH:N switches to the QEMM386.SYS command linein CONFIG.SYS and reboot the system. After rebooting, check the Startup group and re-move all programs from the Startup group. Rebooting the system again should now takecare of the looping and protection fault.

Symptom 24-39. An error appears: “Configuration too large for memory”while running Optimize under Windows 95 This also typically occurs with a stan-dard QEMM installation. You’ll need to modify the configuration of your CONFIG.SYSfile. Open the CONFIG.SYS file in a text editor and add the following lines to the end ofthe file:

device=c:\windows\setver.exedevice=c:\windows\ifshlp.sysdos=noumb

If you are loading any ASPI drivers (e.g., ASPI2DOS.SYS or ASPI4DOS.SYS) or have aSCSI CD-ROM or SCSI hard disk, add this line also:

device=c:\windows\aspi2hlp.sys

TROUBLESHOOTING QEMM 821

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

Page 20: Memory Mgrs

Save this modified file, then run the QEMM Optimize feature. If the problem continues,open a DOS prompt and switch to your QEMM directory. Type OPTIMIZE /NH, then se-lect the OPTIMIZE Custom feature (Option F3). At the beginning of the “software detec-tion” (when it says “Starting Windows 95”), hit <Shift>+<F8>. You’ll be prompted toload each driver. Respond “Yes” to each line and watch what is loading. Look for any linethat begins with the command: “DEVICEHIGH=.” If you find one, write this line down,and then reboot the system. When you see “Starting Windows 95” again, press<Shift>+<F5>. Switch to your QEMM directory and type UNOPT <Enter>. Now edit yourCONFIG.SYS file and replace the “DEVICEHIGH=” with “DEVICE=” line. Run Opti-mize again and repeat your search and replace of DEVICEHIGH= lines.

Symptom 24-40. Floppy-drive problems occur after installing QEMMQEMM is generally regarded as an “aggressive” memory manager because it can seek outareas of memory that can be utilized—rather than simply use the memory that is readilyavailable. As a result, it is possible that QEMM can impair some system functions underthe right conditions (usually from using the stealth or ROM hole-detection features). Startby editing the CONFIG.SYS file and add the XST=F000 switch to the QEMM386.SYScommand line. The new command line will appear like:

device=c:\qemm\qemm386.sys ram st:m xst=f000

Save your changes, then reboot the system and test your floppy drive(s). If the problempersists, you’ll need to troubleshoot the ROM hole. Re-open the CONFIG.SYS file in atext editor and remove the “XST” switch you added, then add the exclusion: “X=F400-FFFF” such as:

device=c:\qemm\qemm386.sys ram x=f400-ffff

Save your changes, then reboot the system and test your floppy drive(s). Once the prob-lem is fixed, Quarterdeck suggests that you re-Optimize QEMM by typing: C:/Q at theDOS prompt.

If the problem persists, chances are that the floppy problem is not because of QEMM.You can test this by rebooting the machine. After the machine beeps, press and hold the<Alt> key. You should see a message telling you to press <Esc> to unload DOS-DATA.SYS. Press <Esc>, then immediately press and hold <Alt> key again. You will seea message telling you to press <Esc> to unload QEMM. Press <Esc>. If QDPMI is nor-mally loaded after QEMM, a message will indicate that it cannot load without a memorymanager—press any key to bypass this message. LOADHI entries will warn about driversnot loading high (this is normal when testing). Once the system finishes booting, try thefloppy drive(s) again. If the problem continues, it is resulting from something other thanQEMM. If the problem disappears, you might need to remove QEMM from the system.

Symptom 24-41. Using the RAM parameter with QEMM causes an IBMThinkPad to hang In most cases, the ThinkPad will hang after 10 to 15 seconds. Theextended BIOS Data Area (XBDA) is a data area normally located at the top of conven-tional memory—just below 640KB. This memory is used to hold BIOS-specific informa-tion. By default, QEMM will relocate this XBDA, reclaiming the conventional memory it

822 MEMORY MANAGERS

Page 21: Memory Mgrs

uses and allowing programs, such as VIDRAM to extend conventional memory past640K. On the IBM ThinkPad, this relocation can result in a crash when the ThinkPad op-erating system writes data intended for the XBDA into the wrong place (usually around 10to 15 seconds after loading QEMM). Add the XBDA:L switch to the QEMM386.SYScommand line. This will tell QEMM to move the XBDA to low conventional memory(but demands 1KB of conventional memory).

Symptom 24-42. Problems occur when loading programs high, the sys-tem hangs, or there is other odd behavior from TSRs, device drivers, or PCcards This often happens when QEMM is loaded onto an IBM ThinkPad and cannot de-termine which addresses the ThinkPad’s PC card(s) are using. Each PC card will demandfrom 0 to 64KB of upper memory addressing space, which must be excluded fromQEMM—there is no guarantee that QEMM can auto-detect the region. You’ll need tospecifically exclude the upper memory range where the PCMCIA card is mapped.

If your PCMCIA card is properly configured, a line should be in your CONFIG.SYS thatloads the DICRMU01.SYS driver. This driver is the PC-card resource-map utility, whichtells the card what area of memory it is supposed to use. Check that command line for an“/MA=” parameter. This parameter will be followed by the ranges of memory to excludewith the X= parameter on the QEMM386.SYS line. For example, if your CONFIG.SYSfile has a DICRMU01.SYS line with /MA=D000-D3FF, you would need to add X=D000-D3FF to the end of your QEMM386.SYS command line in the CONFIG.SYS file.

Symptom 24-43. QEMM generates an Exception 6, 12, or 13 error Gener-ally speaking, an “exception error” indicates a programming fault that the CPU cannotdeal with. An exception error can be caused by a problem with QEMM itself (corruptionin the QEMM files) or an application (caused by a software bug or simple incompatibilityrunning under QEMM). Run a virus checker to scan for any possible virus activity on diskor in memory. Run ScanDisk to check and correct any file problems on the disk. Checkwith the application’s maker to see if there are known incompatibilities with QEMM, andif there are any workarounds or patches to the application. Finally, try booting withoutQEMM or use another memory manager to correct the problem.

Symptom 24-44. Systems with Disk Manager fail to Optimize properlyThis often happens with Disk Manager and QEMM 8.00 (dated 11/4/95). Optimize hangsduring the software detection phase. With QEMM 8.00, the XBIOS.OVL overlay filecould not be loaded high successfully during the Optimize process. This file does not ap-pear in CONFIG.SYS or AUTOEXEC.BAT—it is loaded automatically and invisibly byDisk Manager at start time. Contact Quarterdeck and obtain the patch for QEMM 8.01.Until you can obtain QEMM 8.01, you might work around the problem using a text editorto add the line: XBIOS to the end of the OPTIMIZE.NOT file in your QEMM directory.

Troubleshooting HIMEM/EMM386Symptom 24-45. System hangs using HIMEM /TESTMEM The memory testperformed by HIMEM.SYS (version 3.10) might fail—possibly causing your system to

TROUBLESHOOTING HIMEM/EMM386 823

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

Page 22: Memory Mgrs

hang up—if your machine uses a hardware cache controller. This is because some hard-ware cache controllers do not handle 16MB and 32MB memory boundaries well. As a re-sult, the HIMEM.SYS memory test fails. To work around this problem, disable thehardware cache controller in your system or remove the /TESTMEM switch from theHIMEM command line.

Symptom 24-46. A20 gate problems occur when installing HIMEM The se-lection of A20 gate handlers is accomplished automatically—HIMEM runs through a se-ries of auto-detection schemes trying to find a match. When a match is found, theparticular A20 handler is installed. If no match is found, the default A20 handler is in-stalled. Because of the diverse and non-standard nature of today’s PCs, HIMEM auto-de-tection fails and the default handler is installed. Unfortunately, the default handler mightnot work too well. In this case, you should use the /A20 switch, along with the corre-sponding machine designation number (Table 24-1) to select the proper A20 handler foryour particular PC.

Symptom 24-47. A general error or system problem occurs with EMM386In most cases, you’ll notice that the system or an application will lock up when usingEMM386. Table 24-3 lists the version designations for EMM386. Fully reinitialize thesystem: turn your machine off, then turn it back on (a.k.a. “cold boot”). When the message“Starting MS-DOS” appears, press <F8> and elect to start the system interactively. Whenprompted to load EMM386.EXE, choose “N” for no. If the problem persists whenEMM386.EXE is not loaded, something other than EMM386.EXE is causing the problem.If the problem disappears when EMM386.EXE is not loaded, edit the CONFIG.SYS fileas follows using an ASCII text editor:

device=c:\dos\emm386.exe x=a000-f7ff nohi noems novcpi nomovexbda notr

Cold boot the machine again. If the problem still persists, the system might have faulty RAMor might require a special machine switch for HIMEM.SYS. Also, advanced memory-related

824 MEMORY MANAGERS

TABLE 24-3 VERSION DESIGNATIONS FOREMM386

MS-DOS VERSION EMM386 VERSION

MS-DOS 5.0 4.20

MS-DOS 5.00a 4.33

MS-DOS 6.0 4.45

MS-DOS 6.2 4.48

MS-DOS 6.21 4.48

MS-DOS 6.22 4.49

Windows 3.1 4.44

Windows 3.11 4.44

Windows for Workgroups 3.1 4.44

Windows for Workgroups 3.11 4.48

Windows 95 4.95

Page 23: Memory Mgrs

CMOS settings (such as shadow RAM) might need to be disabled. The system BIOS mightalso need to be upgraded. If the problem disappears after loading the modified EMM386command line, the problem is probably related to some service that EMM386 provides.

Try removing the X=A000-F7FF switch. If the problem reappears, EMM386.EXE mightbe scanning memory too aggressively and configuring upper memory blocks on top of someadapter ROM or RAM. Restore the exclusion, but try narrowing the exclusion range. Tryremoving the NOHI switch. If the problem reappears, EMM386.EXE might be loading intoan occupied UMB. If all such regions are excluded, EMM386.EXE cannot be loaded highon the system and NOHI must be used. Try removing the NOEMS switch. If the problemreappears, EMM386.EXE might be conflicting with some hardware ROM or RAM addressin the UMA when attempting to establish an expanded memory (EMS) page frame. If EMSis required to run MS-DOS-based applications, use the parameter FRAME=. The anglebrackets should appear in both places>> (where × is the defined hexadecimal address) to ex-plicitly specify placement of the EMS page frame in a non-conflicting region. If no appli-cations require EMS, simply continue to use the NOEMS parameter.

Next, try removing the NOVCPI switch. The NOVCPI switch disables Virtual ControlProgram Interface (VCPI) support and can be used only in conjunction with the NOEMS pa-rameter. If the problem reappears, the application might not be fully compatible with theEMM386.EXE VCPI allocation scheme. Either continue using the NOVCPI parameter or donot load EMM386.EXE when using the application. Remove the NOMOVEXBDA switch.Some machines use the last 1KB of conventional memory for an eXtended BIOS Data Area(XBDA). By default, EMM386.EXE remaps this memory area into the UMA instead of con-ventional memory. If this causes unexpected system behavior, the NOMOVEXBDA para-meter must be used. Finally, try removing the NOTR switch. EMM386.EXE has a detectioncode to search for the presence of a token-ring network adapter—this detection code mightcause some computers to hang. The NOTR switch can be used to disable this search.

Symptom 24-48. An error appears: “Unable to set page frame base ad-dress—EMS unavailable” This error message is displayed if EMM386 cannot locatea 64KB contiguous “hole” in the UMA for the EMS page frame. According to the LIM 3.2specification, a page frame consists of four contiguous 16KB pages, and a LIM provider(EMM386) must set the page frame. According to the LIM 4.0 specification, an EMSprovider need not set a 64KB page frame, but it should set a 16KB page at the minimum.

Although EMM386 conforms to the LIM 4.0 specification, it does not load as an EMSprovider if it cannot find a 64KB contiguous hole that can be used for the page frame. Thisis because the majority of LIM 3.2 applications assume the existence of a page frame.EMM386 can be forced to load without a LIM 3.2 (64KB) page frame by using the Pn pa-rameters (see Table 24-2). If you force EMM386 to load as a LIM 4.0 provider, do not at-tempt to run LIM 3.2 applications. The best solution is to free a 64KB block of memoryin the UMA so that EMM386 can support LIM 3.2 and higher.

Symptom 24-49. An error appears: “Size of expanded memory pool ad-justed” This message is displayed if EMM386 cannot provide all the EMS memory re-quested on the command line. For example, if you use the command line:

device=emm386.exe 2048

TROUBLESHOOTING HIMEM/EMM386 825

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

Page 24: Memory Mgrs

and your computer only has 1024KB of XMS memory, EMM386 displays this error mes-sage and provides as much EMS as possible (notice that EMM386 uses some XMS mem-ory for its own code and data, which reduces the amount of XMS memory available forEMS simulation). Little can be done to correct this error, except to reduce the EMS calledfor on the EMM386 command line or add more physical memory to the PC.

Symptom 24-50. Windows 3.x cannot provide EMS when using theNOEMS switch According to the LIM 4.0 specification, an EMS page can also residein conventional memory (0 to 640KB). The EMM386 EMS line starts at 256KB by de-fault. If the NOEMS switch is added to the command line, all the holes in the adapter re-gion A000h-FFFFh are used for UMBs, and EMM386 cannot provide any EMS. IfWindows 3.0 is started and an MS-DOS session are started, EMM386 might not be able toprovide EMS. If Windows 3.0 is running in “386 Enhanced” mode, EMM386 can provideEMS within an MS-DOS session. However, the EMS pages are in conventional memory,which can cause problems because of the behavior of LIM 3.2 applications. In a Windows3.1 “386 Enhanced” mode MS-DOS session, EMS is not provided. Your best course hereis to remove the NOEMS switch from the EMM386 command line.

Symptom 24-51. EMM386 locks up the computer Although EMM386 is gen-erally considered to be a basic and robust memory manager, there are some conditionswhere its use might result in a system crash. The /HIGHSCAN feature cannot be used onsome computers. If the EMM386 command line in the CONFIG.SYS file contains the/HIGHSCAN parameter, remove /HIGHSCAN from the command line, save the CON-FIG.SYS file, and restart your computer.

Next, use excludes to isolate potential EMM386 memory conflicts. EMM386 mighthave incorrectly identified an area being used by the system as a “hole” (a region that canbe used as a UMB or an EMS page frame). As a result, EMM386 accidentally overwritesa portion of memory that is used by a hardware adapter in your computer. Start by ex-cluding addresses in the range A000-EFFF. EMM386 does not use any part of the ex-cluded region for a UMB or EMS page frame. If the problem disappears, you might beable to identify the correct region(s) with some experimentation. Start by excluding alarge region, then reducing the size of the region. For example, start with:

device=emm386.exe noems x=a000-efff

If that works, try narrowing the range to:

device=emm386.exe noems x=c000-dfff

If that works too, try narrowing the range further to:

device=emm386.exe noems x=c800-cfff

Remember that you can use multiple exclusions on the same EMM386 command line,such as:

device=emm386.exe noems x=c000-c7ff x=e000-efff

826 MEMORY MANAGERS

Page 25: Memory Mgrs

If the computer has a SCSI disk controller and requires a device driver to operate theSCSI adapter, be sure that the DEVICE= line for the SCSI driver appears before theEMM386 command line. Examples of SCSI device drivers include ASPI4DOS.SYSand USPI14.SYS.

If problems continue, try loading the SmartDrive double buffer driver. The drivershould appear before the EMM386 command line in CONFIG.SYS. If you’re using DOS6.0 (or later), Windows 3.1 (or later), or Windows for Workgroups, the SmartDrive dou-ble buffer driver is loaded from the CONFIG.SYS file, such as:

device=c:\windows\smartdrv.exe /double_buffer

In the AUTOEXEC.BAT file, add a /L to the end of the SMARTDRV.EXE line, such as:

c:\windows\smartdrv.exe /L

If the problems persist, add a plus sign (+) to the end of the double buffer device line:

device=c:\windows\smartdrv.exe /double_buffer+

If you use the SMARTDRV.SYS driver included with MS-DOS 5.x, the SmartDrive dou-ble buffer driver is loaded in the CONFIG.SYS:

device=c:\dos\smartdrv.sys /b+

If the problem with EMM386 continues, experiment with different HIMEM.SYS A20handlers. This is done using the /MACHINE: switch on the HIMEM.SYS device line (seeTable 24-1).

Symptom 24-52. An error appears: “Insufficient memory for UMBs or vir-tual HMA” This can often happen when using an AMI or Phoenix BIOS. EMM386might provide this message—even though there is more than 384KB of extended memory.To work around this problem, modify your CMOS RAM settings to disable the “Fast A20Gating” feature. You might also be able to update your motherboard’s BIOS. This mes-sage might also appear on systems with only 384K of extended memory if MS-DOS isloaded high. The solution is to exclude 64KB from EMM386 in order to accommodateloading MS-DOS high.

Symptom 24-53. An error appears: “Unable to create page frame” IfEMM386 is unable to find 64KB of contiguous memory in the upper memory area, it can-not create an expanded memory page frame. If you don’t want expanded memory for yoursystem, you can substitute the NOEMS switch for the RAM switch in your EMM386 com-mand line in CONFIG.SYS. If you do want expanded memory, you can try establishing apage frame in a portion of the upper memory area not normally used by EMM386. Youcan try putting the page frame in the E000h memory block by modifying the EMM386command line:

device=c:\dos\emm386 m9 ram

TROUBLESHOOTING HIMEM/EMM386 827

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

Page 26: Memory Mgrs

Symptom 24-54. An error appears: “EMM386 Privileged Operation Error#01” The problem is with EMM386 and the AST 386 FastBoard. AST Research hasconfirmed that loading EMM386 (MS-DOS 5.0 and later versions) on an AST Premium286 computer with an AST 386 FastBoard upgrade might cause the error. The AST 386FastBoard is an 80386 upgrade for AST 80286 motherboards. This error might occur ifthe 386 FastBoard driver (FB386.SYS) is not loaded before EMM386 in theCONFIG.SYS file. Load the 386 FastBoard device driver (FB386.SYS) before EMM386:

device=c:\fb386.sysdevice=c:\dos\himem.sysdevice=c:\dos\emm386.exe

Symptom 24-55. An error appears: “EMM386 Not Installed—Unable to setpage frame base address” This message indicates that EMM386 was unable to find64KB of contiguous space needed for the expanded memory page frame. When you spec-ify the RAM switch (or no switch at all), EMM386 attempts to create a 64KB page framein the Upper Memory Area (UMA). The actual amount of extended memory used will be108KB (64KB + 44KB = 108KB). The extra 44KB is used for tables that EMM386 setsup to emulate expanded memory. This 64KB of space acts as a window into expandedmemory—allowing programs to see all the available expanded memory 64KB at a time.Try using the NOEMS switch if expanded memory is not needed. Next, be sure HIMEMis installed above EMM386 in the CONFIG.SYS file (other devices should be loaded af-ter EMM386, except for such drivers as DMDRVR.BIN, EMM.SYS, orADAPTEC.SYS). If you’re not working on an IBM machine, add the following switchesto the EMM386 command line in the CONFIG.SYS file:

device=c:\dos\emm386.exe i=e000-efff (m9 or frame=e000) ram

The “included” E000h-EFFFh memory range is generally not used by non-IBM machines,and including this range can allow you to find 64KB of free contiguous memory. The“mx” switch also allows you to specify different locations for the page frame to begin (seeTable 24-2). For m9, the page frame will attempt to begin at E000h.

If the program requiring expanded memory can use the LIM 4.0 specification, then the64KB page frame can be set non-contiguously. Add the “Pn=address” parameter to theEMM386 command line in CONFIG.SYS:

device=c:\dos\emm886.exe p0=c800 p1=d400 p2=e000 p3=d000 ram

Symptom 24-56. An AT&T 6386E system hangs with a RAM option inEMM386 An expanded-memory page frame set to DC00h or higher on a AT&T 6386Ecauses the system to hang up. For example, the following DEVICE= statement hangs thesystem:

device=emm386.exe m8 ram

828 MEMORY MANAGERS

Do not try this procedure on an IBM model PS/2 computer. Always remember to backupyour existing copy of CONFIG.SYS and AUTOEXEC.BAT (preferably to a bootablefloppy disk) before attempting any modifications to your startup file.

Page 27: Memory Mgrs

The AT&T 6386E has a ROM option at address E800h that is used during system opera-tions. Setting a page frame to DC00h or higher overlaps with the ROM option, resultingin a system lockup. Alter the “mx” switch to start the page frame at an address that avoidsthe conflict.

Symptom 24-57. A Plus Hardcard II is very slow with EMM386 You mightneed to exclude the Hardcard XL BIOS from the EMM386 command line:

device=c:\dos\emm386.exe x=c000-c800

Notice that the exclusion range is only an example—the exact addresses to exclude willdepend on your configuration. If you are not using UMBs, use the “frame=” parameter toset the address of the page frame so that the page frame will not conflict with the addressesbeing used by the Hardcard. For example, if the Hardcard is using addresses C000-C800,you might use:

device=c:\dos\emm386.exe frame=d000

This sets the page frame for the D000-DFFF range of memory.

Symptom 24-58. Exception errors occur with EMM386 This kind of errormeans that the CPU has encountered a general-protection violation. Because theEMM386 driver operates the CPU in virtual real mode, the CPU checks for valid memoryaccesses. If a program tries to access memory that it is not allowed to access, the CPUgenerates an exception fault error, which is detected by EMM386. In effect, EMM386 isreporting a program error detected by the CPU. In general, this error should not occur onPCs that are 100% IBM compatible. Machines that are not might require an OEM versionof EMM386. Table 24-4 is a list of protected-mode exception errors and their names:

Troubleshooting 386MAXSymptom 24-59. The Qualitas DOSMAX utility doesn’t function as ex-pected DOSMAX for Windows won’t work if software is loaded at the top of conven-tional memory (near 640KB). Most resident programs load into the lowest addressmemory available. If the software loads into the top of low DOS memory, DOSMAX forWindows won’t work. Disk-controller software is the most common software that usesmemory at the top of low DOS, but CD-ROM device drivers sometimes configure a bufferin this area as well. Certain viruses have also been known to attach themselves to this areaof memory.

DOSMAX also won’t work if the system’s Qualitas MAX profile includes the option“NOXBIOS” (Qualitas MAX is not relocating the extended BIOS into high DOS)—DOS-MAX is disabled. The extended BIOS normally resides at the top of conventional mem-ory. A problem can also occur if you have a system with less than 640KB base memory.Qualitas MAX backfills this memory to 640KB, but these systems aren’t compatible withWindows 3.x.

TROUBLESHOOTING 386MAX 829

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

Page 28: Memory Mgrs

If you’re still having problems with DOSMAX, exit Windows and add the “DOSMAX-Mono=OFF” switch to the [Qualitas] section of SYSTEM.INI. Add the line (and the sec-tion if it doesn’t already exist). Restart Windows and retry DOSMAX. You might also tryexiting Windows and editing your 386MAX.PRO file—using a semicolon, comment-outthe “VGASWAP” and “USE=B000-B800” options. Re-run Maximize and see if DOS-MAX works properly. If problems persist, check to see that you have the most current ver-sion of your video drivers (try the standard VGA drivers that come with Windows).

Symptom 24-60. The error appears: “Error 1014: Disk cache or other fileI/O software using EMS memory” Qualitas MAX has detected EMS memory in useby a disk cache or other resident file I/O software (the other software might be a disk-com-pression utility or a network). It is recommended that these programs use extended (XMS)memory when operating in a Windows environment. Check EMS memory usage by typ-ing “386util /e” in the Qualitas MAX directory to determine which programs are usingEMS memory. If you must run Windows with this type of software, you might overridethe error message by editing your AUTOEXEC.BAT file and adding the DOS command:“SET EMSCACHE=OK.”

Symptom 24-61. The error appears: “VxD Error: Unable to provide DOSMAXfeatures” DOSMAX has detected that your system has less than 640KB of conventionalmemory. Because the top of conventional memory does not correspond to the bottom ofgraphics memory (as it does on a system with 640KB) DOSMAX features are unavailable.Most resident programs load into the lowest address memory available. If the software loadsinto the top of low DOS memory, DOSMAX for Windows won’t work. The most common

830 MEMORY MANAGERS

TABLE 24-4 PROTECTED MODEEXCEPTION ERRORSFOR EMM386

CODE MEANING

0 Divide error

1 Debugger interrupt

2 Nonmaskable interrupt

3 Breakpoint

4 Overflow interrupt

5 Array-boundary violation

6 Invalid opcode

7 Co-processor not available

8 Double fault

9 Co-processor-segment overrun

10 Invalid task state segment

11 Segment not present

12 Stack exception

13 General-protection violation

14 Page fault

16 Coprocessor error

Page 29: Memory Mgrs

software that loads in this manner is software that is necessary for certain hard-disk controllersand some CD-ROM buffers. The best way to overcome this kind of problem is to bring con-ventional memory to 640KB or to disable software that loads at the top of DOS memory.

Symptom 24-62. The error appears: “VxD Error: Qpopup is not running”The Qualitas MAX device driver will not be able to protect this DOSMAX window fromprograms attempting to enter graphics mode. QPOPUP.EXE is not loading from theWIN.INI file or the Startup group. Without this file, Qualitas MAX can’t protect DOS-MAX windows from programs that attempt to enter graphics mode. Check the “LOAD=”line in the WIN.INI file. You can also try to reinstall DOSMAX by using the DOSMAXentry on the Startup tab of the Toolbox (Windows 95).

Symptom 24-63. The error appears: “Error 1021: Qualitas MAX stacks re-quired for DOSMAX support” There is a problem with the assignment of stacks inMAX. Qualitas MAX stacks must be enabled to use the DOSMAX feature. Click LoadDOS stacks high on the Startup tab of Toolbox (Windows 95) or remove the STACKS=0option from the 386MAX.PRO file and reboot your system.

Symptom 24-64. The error appears: “Error 1011: Bus master disk subsys-tem detected that requires Qcache or other compliant disk cache to beloaded” Qualitas MAX detected a bus-mastering hard-disk controller that does not sup-port VDS. Also, your 386MAX.PRO file might contain the NOSCSI option. In eithercase, 386MAX.VXD expects to find a VDS-compliant disk cache program in memory.You’ll need to update the bus mastering driver.

Symptom 24-65. The error appears: “Error 2035: V86 RAM page(s) in use”The error message might also ask you to modify “RAM=” statement(s) in the386MAX.PRO file to remove one or more memory regions. Windows 95 is attempting touse RAM pages that are already in use by Qualitas MAX. Remove the overlapping por-tion of the “RAM=” statement from the 386MAX.PRO file and reboot the system.

Symptom 24-66. The error appears: “Error 1020: 386MAX.SYS versionmismatch” The versions of 386MAX.SYS and 386MAX.VXD that are in use do notmatch. Check that the current version of each file is in the Qualitas MAX sub-directory.You might need to reinstall MAX from scratch.

Symptom 24-67. Video problems or conflicts occur while using MAX Com-mon video symptoms include a blank screen on entering or exiting a program, spontaneoussystem reboots, strange graphics or characters appearing on the screen, or the system hangsafter the Qualitas MAX initialization screen. Several regions in the high DOS area havepredetermined uses. The first 128KB (between addresses A000h and C000h) is for mem-ory on video boards. Each kind of video display uses a different amount of address space.Just above the video RAM area is a 32KB area (C000h-C800h) for the ROM on manyVGA video adapters. In most cases, 386MAX automatically identifies used memory, anddoes not map into the appropriate video regions of most systems. However, under somecircumstances, video cannot be accurately identified.

TROUBLESHOOTING 386MAX 831

2

SY

ST

EM

DA

TA

AN

D T

RO

UB

LE

SH

OO

TIN

G

Page 30: Memory Mgrs

If you experience any odd video symptoms, Qualitas MAX might have re-mapped highDOS memory into a region that the video adapter needs, or might have unsuccessfully re-located the video ROMs via the VGASWAP option. To correct this conflict, disableVGASWAP and USE=B000-B800 in the 386MAX.PRO file. You can do this in Win-dows 95 by using the UMB/Adapters tab in Toolbox to deactivate use of the MonochromeDisplay Area (MDA) and VGASWAP. When you make these changes, Toolbox displaysa message suggesting that you run Maximize. Choose Exit, then reboot the system to ac-tivate your changes, which result in a change to the configuration of high DOS memory.If the problem is resolved, it is important to re-run Maximize at this time to re-optimizeyour memory configuration.

In a DOS environment, edit the 386MAX.PRO file to make the changes. Use any texteditor to look at the profile located in the Qualitas MAX directory (QMAX is the defaultdirectory). If there is a “USE=B000-B800” or any “USE=” statement in the B000hrange, comment that line out of the profile by placing a semicolon (;) in front of the line.Repeat the process for the keyword VGASWAP. Reboot the system to activate thechanges. Again, if the problem is resolved, it is important to re-run Maximize at thistime to re-optimize your memory configuration.

Further StudyThat’s it for Chapter 24. Be sure to review the glossary and chapter questions on the ac-companying CD. If you have access to the Internet, take a look at some of these memory-manager resources:

Microsoft (HIMEM and EMM386): http://www.microsoft.com

Qualitas (386MAX and BlueMAX): http://www.qualitas.com

Quarterdeck (QEMM): http://www.qdeck.com

832 MEMORY MANAGERS