ID:LH LOADHI: Recent Versions
Quarterdeck Technical Note #138 Filename: LOADHI.TEC
by Joe Wilder CompuServe: LOADHI.TEC
Last revised: 2/12/92 Category: QEMM
Subject: A discussion of OPTIMIZE and the LOADHI programs that come with
QEMM-386, QEMM 50/60, and QRAM, and notes on how they work.
This technote discusses Quarterdeck's LOADHI programs, concentrating on
material which is not already in the Quarterdeck manuals and speaks to
versions of QEMM-386 5.0 or later, QEMM-50/60 5.0 or later, and any version of
QRAM. The appropriate Quarterdeck manual contains the basic information about
and instructions for loading high.
Q: WHAT DOES OPTIMIZE DO?
OPTIMIZE will load TSRs and device drivers high in the most "optimal" way,
often testing all possible combinations, which can number in the millions. The
LOADHI programs available in QEMM-386 version 5 and later can determine the
size of particular TSRs or device drivers and will place them in specific
memory address ranges. It would be improbable that one could use the LOADHI
utilities manually and improve on the way OPTIMIZE arranges programs in high
memory. There are, however, instances where you may need to use the LOADHI
programs manually. Diskless network workstations often need to have their
CONFIG.SYS constructed when you aren't actually logged onto the specific
workstation. Such a procedure wouldn't be compatible with OPTIMIZE. These
workstations could still benefit greatly from using the LOADHI programs
manually. There is a separate Quarterdeck Technical Bulletin #191,
"Quarterdeck's OPTIMIZE Program", on the subject of OPTIMIZE.
Q: WHAT IS LOADHI ALL ABOUT?
There is a popular misconception that PCs using DOS have an absolute limit of
640K of space to run programs in. Untrue --there is actually 1024K of
addressable code space. The LOADHI programs are used to run resident programs
and device drivers in the address space between 640K and 1024K. This area is
normally reserved for hardware devices such as video cards, system ROM and
network adapters. Any space in that range that isn't occupied by devices,
ROMs, or RAM is just that, empty space. There is usually more than one
available space. Each of these areas is called a region. QEMM-386 and QEMM-
50/60 put memory in these empty spaces with a process called memory mapping.
Memory assigned to these regions is called "High RAM." QRAM relies on the
ability of some Expanded memory cards and some types of ShadowRAM to map
memory into this same portion of the address space to create High RAM. The
more devices you have that use the address range 640-1024K, the less high
memory will be available to load programs into. Expanded Memory managers also
utilize 64K of this upper address space for what is called a "Page Frame."
The Expanded Memory Page Frame is a space through which programs familiar with
the Expanded Memory standard can get access to the pool of Expanded Memory.
Q: CAN I GET RID OF THE EXPANDED MEMORY PAGE FRAME?
The Page Frame may turned off, and doing so would allow space for
64K more High Ram. The disadvantage to doing this is that the Stealth feature
of QEMM-386 is disabled (the Stealth feature usually creates more than 64K of
additional High RAM) and programs that want to use Expanded Memory can no
longer do so. Therefore, turning off the Expanded Memory Page Frame is only a
viable option for users whose programs don't use Expanded Memory. The
parameter to turn off the Expanded Memory Page Frame is "FRAME=NONE" in QEMM-
386 and QEMM-50/60, and "FL=0" in QRAM.
Q: WILL LOADHI LOAD TSRs DIRECTLY INTO EXTENDED OR EXPANDED MEMORY?
No. New QEMM-386, QEMM-50/60, and QRAM users often assume that LOADHI can load
TSRs and device drivers directly in Extended or Expanded Memory. This is not
the case. The only address space outside of conventional memory where these
items can be run is in what were empty addresses (previous to the installation
of QEMM-386 and the RAM parameter) in the range from 640K to 1024K where QEMM-
386 or QEMM-50/60 can map, or where the EMS manager can map to allow QRAM can
create High RAM. This is where High RAM gets installed when the RAM parameter
Q: WHY AM I GETTING AN ERROR MESSAGE: "No High Memory Available"?
The RAM parameter to QEMM386.SYS and QEMM.SYS must be invoked in order to use
LOADHI programs. This attaches some Expanded Memory to the unused addresses
in the reserved memory area. Once the High RAM is available, programs can be
loaded there with LOADHI. If loading high is attempted without the RAM
parameter being specified, the error message above will appear. Using the RAM
parameter to QEMM386.SYS prevents QEMM-386 from being turned off.
Q: I SEEM TO HAVE ENOUGH HIGH RAM, BUT MY PROGRAM STILL WILL NOT LOAD HIGH.
Each program must be loaded into a single contiguous memory region. Because of
this, very large TSRs and device drivers often won't load high. For instance,
if there are two high memory regions, one of 80K, and the other of 32K, a
program that requires 90K to load wouldn't be able to be loaded high. It
would have to fit in one region or the other. The size and number of regions
varies from computer to computer depending on the size of the BIOS, the number
of devices and where in the 640-1024K address space these items are situated.
In versions 6.0 and later of QEMM-386, a technology is available that will
allow for the temporary use of the Page Frame or a ROMs address space for the
initialization of a TSR or driver if it will shrink back to a small enough
size so as not to use the extra space once it is loaded. This allows you to
"Squeeze" something into a smaller region than it could normally be loaded
Q: IS THERE ANY WAY OF FINDING JUST A LITTLE MORE HIGH RAM?
There are some small things you can do that may improve your available
conventional memory. Rearranging your CONFIG.SYS and AUTOEXEC.BAT so that the
items that take the most memory come first often will improve available
conventional memory when OPTIMIZE is run. Setting up your hardware devices so
the available High RAM is in fewer larger contiguous regions instead of many
small fragmented regions will allow OPTIMIZE more possibilities for putting
things up high. For example, three 7K regions often aren't as usable as one
21K area. Changing the address ranges hardware devices use is accomplished by
reconfiguring the hardware itself. Some devices have jumpers or switches on
the card, others are software configurable. Using the Analyze feature of
QEMM-386 or Manifest may help you to find some more places to put High RAM.
If this procedure is used, the instructions must be followed explicitly for
safety's sake. QEMM-386 version 6.0 and later have the new Stealth
technology. Stealth allows you to put the ROMs that normally reside in upper
address space (640-1024K) somewhere else so the address space they normally
occupy can be used to create more High RAM. You generally get an 84K or
greater increase in the amount of High RAM available when this feature is
implemented. There is a Quarterdeck Technical Bulletin, #205,
"Troubleshooting Stealth" on the subject of Stealth.
Q: I HAVE A PS/2 MICROCHANNEL MACHINE WITH AN 80286 PROCESSOR. IS THERE A
PRODUCT THAT WILL ALLOW ME TO LOAD HIGH?
Yes - Quarterdeck makes a product called QEMM-50/60 which is specifically for
PS/2 models 50 and 60 microchannel machines. There are limitations to these
machines. They must have add-on memory that conforms to the specification of
that listed in the QEMM-50/60 manual. This product was developed specifically
for these particular PS/2 systems and won't work on other 80286 platforms.
See Quarterdeck Technical Bulletin #186, "QEMM-50/60 Hardware Requirements",
for more information on QEMM-50/60 and what boards work with it.
Q: WHAT IF I HAVE AN 8080 OR 80286 MACHINE THAT IS NOT A PS/2 MICROCHANNEL
MACHINE. IS THERE ANYTHING THAT WILL WORK FOR ME?
Yes - If you have an add-on memory board on your machine that conforms to the
EMS 4.0 HARDWARE specification, Quarterdeck's QRAM product can create High RAM
for you. And QRAM comes with the LOADHI and OPTIMIZE programs. QRAM can also
create High RAM from the Shadow RAM that comes on some of the Chips &
Technologies type 80286 systems.
Q: ARE THERE LIMITS TO LOADING HIGH ON 8088 AND 80286 MACHINES?
Neither QEMM-50/60 nor QRAM can make use of QEMM386's Squeeze technology.
The value of loading high into the High RAM created by these programs in space
already available has been indispensable to many though.
Q: WHY WON'T LOADHI LOAD MY BUFFERS HIGH?
The limitation is not in the LOADHI program, but with Quarterdeck's
BUFFERS.COM program. Quarterdeck would normally recommend setting the
BUFFERS=xx statement in the CONFIG.SYS to 1 buffer, then using the LOADHI.com
and BUFFERS.COM program in the AUTOEXEC.BAT file to LOADHI the remainder of
the BUFFERS desired (for example: c:\QEMM\LOADHI C:\QEMM\BUFFERS=20.) In
QEMM-386 versions previous to 6.0 (and versions of QEMM-50/60 previous to
version 6 and versions of QRAM previous to version 2), the BUFFERS.COM program
can only create disk BUFFERS for DOS versions 2.x and 3.x. The BUFFERS.COM
program that comes with QEMM-386 version 6.0 and later (and QEMM-50/60 version
6 and later and QRAM version 2 and later) can create BUFFERS for DOS version
5.0 as well. There is no version of Quarterdeck's BUFFERS.COM program that
will work with DOS version 4.x. This is due to the unusual way disk BUFFERS
are implemented by DOS 4.x. The Quarterdeck Technical Bulletin #226,
"BUFFERS", discusses the way DOS's BUFFERS and Quarterdeck's BUFFERS.COM work.
Q: IS THERE ANYTHING SPECIAL TO CONSIDER ABOUT LOADING HIGH FOR DESQVIEW
DESQview has the capability of running most of its own code in high memory.
You do not have to use the RAM parameter (although it's O.K. to do so) to get
this feature. DV.COM (XDV.COM renamed) will load into the memory mapped into
the available addresses on its own, whether QEMM-386, QEMM-50/60, or another
EMS manager has mapped the memory there. It will then run DESQview in that
memory. DESQview can use as much as 95K of reserved memory space. Loading
high too many resident programs and drivers before going into DESQview may
cause DESQview to load more of itself in the lower 640K, resulting in little
or no gain for the largest available window size in DESQview. Frequently,
because of the different sizes of memory regions available, you may actually
get a slightly larger window size in DESQview by loading something low instead
of high. If you are running DESQview, it is a good idea to avoid loading "Pop-
up" type TSRs before DESQview (using LOADHI or not) but instead run them in
DESQview windows, by means of which their overhead in lower memory can be
*This technical note may be copied and distributed freely as long as it*
*is distributed in its entirety and it is not distributed for profit. *
* Copyright (C) 1990-2 by Quarterdeck Office Systems *
************************ E N D O F F I L E *************************