

              NOVELL TECHNICAL INFORMATION DOCUMENT

TITLE:              Basic Memory Optimization and Troubleshooting
DOCUMENT ID:        014912
DOCUMENT REVISION:  A
DATE:               27FEB94
ALERT STATUS:       Yellow
INFORMATION TYPE:   Issue
README FOR:         NA

NOVELL PRODUCT and VERSION:
Novell DOS 7

ABSTRACT:

This document explains basic memory optimization techniques for
use with the Novell DOS 7 operating system.

------------------------------------------------------------------
DISCLAIMER
THE ORIGIN OF THIS INFORMATION MAY BE INTERNAL OR EXTERNAL TO
NOVELL.  NOVELL MAKES EVERY EFFORT WITHIN ITS MEANS TO VERIFY
THIS INFORMATION.  HOWEVER, THE INFORMATION PROVIDED IN THIS
DOCUMENT IS FOR YOUR INFORMATION ONLY.  NOVELL MAKES NO EXPLICIT
OR IMPLIED CLAIMS TO THE VALIDITY OF THIS INFORMATION.
------------------------------------------------------------------

ISSUE

     Because the Novell DOS 7 operating system has been designed
     to work with all IBM-compatible personal computers and
     software applications there is no single, perfect, memory
     setup that will optimize memory use for all situations.

     Memory optimization will depend on both your particular
     hardware setup and the software applications you will be
     using.

     With some trial-and-error system fine tuning, you can
     optimize Novell DOS 7 memory management to meet your
     particular needs.

     Following are techniques and suggestions that will help
     optimize your computer's software setup.


     CHANGING THE ORDER OF MEMORY ALLOCATION

     The first step in optimizing the system memory can be as
     simple as rearranging the order in which memory blocks are
     assigned by the CONFIG.SYS and AUTOEXEC.BAT files.

     The general rule is to use upper memory and high memory as
     much as possible to free conventional memory for
     applications.

     If there are any add-on boards that use RAM, make sure that
     they are configured so that their RAM is allocated from the
     beginning or the end of upper memory.  For example, place a
     network board immediately above the video RAM area instead
     of in the middle of upper memory.

     Device drivers and TSRs can then be loaded into upper
     memory.  For best memory allocation, those drivers and TSRs
     that occupy the largest blocks of memory should be loaded
     first and contiguously.

     For example, if there are three device drivers and two TSR
     programs that need to be loaded, they should be loaded in
     descending order in your CONFIG.SYS file, largest to
     smallest.

     The documentation for the drivers and TSRs should indicate
     the amount of RAM they require.  If the documentation does
     not indicate their size, this can be determined by loading
     the driver or TSR and then using the MEM /U or /B command to
     see a report of memory use.  DOSBOOK MEM provides a full
     description of the MEM command.


     EXPANDING FILES

     If, after determining the size of the drivers and TSRs and
     loading them into high memory, a driver or program fails to
     run properly or produces an out of memory error message, the
     problem may be that the driver or TSR is expanding itself in
     RAM.  Some device drivers and TSRs occupy a minimal amount
     of RAM after they are loaded into memory; however, while
     initializing, they might expand and take up considerably
     more RAM than they will ultimately need.

     Another method of verifying a program's true RAM size is to
     load it into conventional memory, activate the program, then
     run the MEM /AP or MEM /U command to see the actual amount
     of RAM the program occupies.

     If the program or driver expands itself in RAM and you want
     to load it into upper memory, you will have to allow
     sufficient upper RAM to accommodate the initialization size
     of the program.  Using some trial-and-error methods to
     determine this size might be necessary.

     EXAMPLE:  Assume the following Device Drivers and TSRs are
               to be loaded:

               Driver #1       =  13 KB of RAM
               Driver #2       =  10 KB of RAM
               Driver #3       =  16 KB of RAM
               TSR #1          =   4 KB of RAM
               TSR #2          =   6 KB of RAM

               Using the HIDEVICE, DEVICEHIGH or HIINSTALL
               commands, enter these lines in the CONFIG.SYS
               file:

               HIDEVICE = C:\DRIVER#3.SYS ; which uses 16 KB RAM
               HIDEVICE = C:\DRIVER#1.SYS ; which uses 13 KB RAM
               HIDEVICE = C:\DRIVER#2.SYS ; which uses 10 KB RAM
               HIINSTALL = TSR#2          ; which uses  6 KB RAM
               HIINSTALL = TSR#1          ; which uses  4 KB RAM


     NOTE:     Exceptions to loading TSRs and drivers in the
               largest-first order described in this example may
               exist.  Some device drivers must be loaded in a
               specific order.  Read the manufacturer's
               documentation carefully before installing any
               driver.

     In this example, the two TSRs can be loaded with LOADHIGH or
     LH command in the AUTOEXEC.BAT file.  For a discussion of
     the HIINSTALL, DEVICEHIGH, and LOADHIGH commands, refer to
     DOSBOOK.


     LIM PAGE FRAME

     Some applications run better with the availability of LIM
     memory (sometimes called EMS or expanded memory).  The
     documentation for each of your applications will indicate if
     LIM memory is required.

     If the application does not require LIM memory, make sure
     that no LIM page frame is defined.  This will save 64 KB of
     upper memory. In the EMM386.EXE line of your CONFIG.SYS
     file, disable the page frame with the switch /FRAME=NONE. 
     If you are using HIMEM.SYS on a machine with a LIM 4.0
     memory card, specify /CHIPSET=AUTO.


     AFTER INSTALLING NOVELL DOS 7

     Some problems that may you may run across after installing
     the Novell DOS 7 memory drivers include the following:

     1.   Insufficient conventional memory to load a particular
          driver or program.

     2.   LOADHIGH, HIINSTALL, or DEVICEHIGH features do not seem
          to operate correctly.

     3.   Computer lock-ups.

     4.   Upper memory conflicts.

     5.   Expanded memory problems.

     6.   Video problems.

     7.   Error message: "Packed file is corrupt."

     Each of these problems and the techniques to correct them
     are described in the following list.  Specific information
     on how to test and eliminate the problems are found in
     DOSBOOK under the TROUBLESHOOTING subject.

     1.   Insufficient Conventional Memory

          After using the Novell DOS 7 memory management system
          to increase conventional memory, a problem due to
          insufficient memory should not exist.  However, if a
          large number of device drivers or TSRs are in use, this
          problem may still occur.

          In case an earlier command or batch file executed
          earlier disabled low memory, try using the MEMMAX +L
          command.  Finally, if the application does not use the
          graphics display area, try the /V switch of the Novell
          DOS 7 memory manager followed by MEMMAX +V before
          loading the application.

     2.   LOADHIGH, HIINSTALL, or DEVICEHIGH Considerations

          Each of these commands requires the availability of
          UMBs (Upper Memory Blocks).  Verify that the UMBs are
          available by using the Novell DOS 7 MEM /B  or MEM /U
          command to see a report of the memory usage.  Available
          UMBs will be marked as FREE under the TYPE column in
          the MEM listing.

          The LOADHIGH, HIINSTALL, and DEVICEHIGH commands are
          required before the installation of the EMM386.EXE or
          HIMEM.SYS driver.  If the MEM report shows that upper
          memory is not being used, check the CONFIG.SYS to make
          sure the driver has been properly installed and that
          the option switches have been entered correctly.

          If they are set, pay particular attention to the
          /FRAME, /AUTOSCAN, /INCLUDE, and /EXCLUDE switches to
          ensure that any upper memory addresses specified by
          these switches have been correctly set (a common error
          is using the letter "O" instead of the number zero). 
          If you do not require the use of expanded memory, set
          the /FRAME switch to /FRAME=NONE.

          The LOADHIGH command must be invoked before using the
          MEMMAX -U command (which disables upper memory).  Use
          the MEMMAX +U command to reenable upper memory, if
          necessary.

          If sufficient upper memory appears to be available but
          LOADHIGH, HIINSTALL, or DEVICEHIGH fails to put a
          particular TSR or driver into upper memory, the device
          driver or TSR program may have expanded when it
          initialized, and it took up considerably more RAM than
          it ultimately needs.

     3.   Computer Will Not Boot or It Locks

          Reboot the computer with a bootable floppy disk in the
          A: drive.  Edit the CONFIG.SYS and AUTOEXEC.BAT files
          to turn off and isolate those lines in the files that
          could be causing the problem.

          The most probable cause is that the Novell DOS 7 memory
          manager has moved something into a region of upper
          memory required by a hardware device driver.  Use the
          /EXCLUDE switch to remedy the problem.

          If a hardware device is not causing the conflict and
          the lockup occurs with a particular program, this
          program may not be able to distinguish when upper or
          low memory is available.  Try using the command MEMMAX
          -U or MEMMAX -L before loading the program.


     4.   Upper Memory Conflicts

          Some typical symptoms of upper memory conflict include
          the following:
          A.  Inability to log onto networks
          B.  Inability to access hard or floppy disk drives
          C.  Error message, such as "card not found"

          The computer or its accessories may be using upper
          memory addresses that are also being accessed by the
          Novell DOS 7 memory manager.

          To prevent this, exclude EMM386.EXE or HIMEM.SYS access
          to the upper memory address range that is causing the
          conflict.  The following recommendations apply to the
          EMM386.EXE driver for 386, 486 and Pentium computers,
          or the HIMEM.SYS driver on 286 computers with shadow
          RAM.

          A good starting place to check for upper memory usage
          is the documentation for any accessory boards or
          drivers that you have installed.  If upper memory is
          required, it is usually indicated in the documentation.

          If you encounter such problems and suspect that upper
          memory conflicts are the cause, first insert REM at the
          beginning of the memory manager line in the CONFIG.SYS
          file.  If the problem disappears, you know that the
          memory driver is part of the conflict and you can begin
          to look at changing switches to correct the problem. 
          If the problem recurs, change the /R=AUTO setting to
          /R=NONE, save the CONFIG.SYS file, and reboot the
          computer to retest.

          A.   Network Hardware Interfacing

               It is common for network hardware to use areas of
               upper memory and thus conflict with Novell DOS 7
               allocations of that memory.  If this occurs, you
               may be unable to log on to the network or random
               lockups could occur.
     
               Another possible cause of network problems is that
               the network driver is designed for use with MS-DOS
               versions other than version 6.0.  Network drivers
               designed for use with MS-DOS versions 3.0 and 4.0+
               may not be appropriate because Novell DOS 7
               operating system reports version 6.0.

          B.   Inability To Access Hard or Floppy Disk Drives

               If you have installed NWCACHE and have enabled the
               /D+ switch, the disk controller must be 100
               percent IBM compatible.  Reset the /D+ switch to
               /D- (the /D# switch works on some controllers) to
               turn off NWCACHE advanced caching for the floppy
               diskette drives (advanced caching for the hard
               disk remains in effect).

               The Novell DOS 7 operating system supports virtual
               DMA and bus master controllers.  Any problem with

               SCSI drives is probably caused by a memory
               conflict.

     5.   Expanded (EMS) Memory Problems

          If a program that requires EMS memory reports that no
          EMS is available or locks up when executed, the problem
          could be caused from an application that assumes that
          the LIM page frame starts at a specific address.

          Remedy this problem by ensuring that the LIM page frame
          defined in the application's SETUP program or
          documentation matches the settings in EMM386.EXE or
          EMMXMA.SYS file.  The /FRAME= switch defines the start
          of the LIM page frame.

          Another cause of insufficient LIM memory occurs if you
          are using the Novell DOS 7 Task Manager in expanded
          memory and too many tasks have been loaded.  Unload a
          few of the tasks and restart the program.

     6.   Viedo Problems

          If you experience problems with the video display after
          installing Novell DOS 7 drivers, a possible cause is
          that the video adapter is trying to use some of the
          upper memory addresses being allocated by EMM386.EXE or
          HIMEM.SYS.

          A quick way to determine if the current memory setup is
          causing a conflict with a video (or other) board is to
          disable the entire memory driver line in the CONFIG.SYS
          file by using the REM command or booting with the F8
          function key.  If the problem does not recur with the
          memory driver disabled, the cause of the problem is
          probably an upper memory conflict.

          Use the EMM386.EXE or HIMEM.SYS /VIDEO option to
          reserve graphics memory addresses normally occupied by
          video display adapters.  If the /VIDEO option is set
          and the video corruption is occurring with a graphics
          program, be sure that the MEMMAX -V switch is
          operative.

          When only text displays are required, the MEMMAX +V
          switch can borrow some of the graphics memory areas and
          add it to conventional memory, providing more space for
          text applications.   However, if an application
          requires graphical displays, you must be sure this
          memory area is available to video by issuing the MEMMAX
          -V command.

          If the video display is corrupted only during use with
          the Novell DOS 7 Task Manager, refer to DOSBOOK.


     7.   Error Message: "PACKED FILE IS CORRUPT."

          This error can occur when the first 64 KB of
          conventional memory (called low memory) have been made
          available by the Novell DOS 7 memory manager. 

          Normally, the operating system occupies this entire
          area.

          Some applications use packing utilities that become
          unable to process commands when run in low memory.  If
          this happens, the following message appears:  "Packed
          file is corrupt."

          For an easy workaround, use the MEMMAX -L command to
          disable low memory before running the application. 
          After exiting the application, use MEMMAX +L to enable
          the low memory area again.

          This problem can occur with other memory managers,
          including QEMM386.  The application vendor may be able
          to supply you with an updated application that does not
          exhibit this problem.

          You can also use the /EXCLUDE switch to exclude an area
          of upper memory that the /AUTOSCAN feature detects as
          being available but is in use by another device, such
          as a network board.


     ISOLATING THE PROBLEM USING "REM"

     Before experimenting with the CONFIG.SYS and AUTOEXEC.BAT
     files, create a bootable floppy disk containing the
     unedited, original versions of CONFIG.SYS and AUTOEXEC.BAT
     files.  With this setup if there is the need to reboot the
     computer from the A: drive,  the most recent configuration
     is available.  The original CONFIG.SYS and AUTOEXEC.BAT
     files could then be copied back to the boot disk.

     After turning off the suspect lines with a REM statement,
     reboot the computer to retest the driver and application
     with which you first encountered the memory problem.  If the
     system runs correctly, reedit the CONFIG.SYS or AUTOEXEC.BAT
     file and remove the REM command from one line, then reboot,
     and reload the application.

     Continue this process until you again come across the memory
     problem.  When it recurs, you will have isolated the line in
     the CONFIG.SYS or AUTOEXEC.BAT file that is causing the
     memory conflict.  You can now take action to resolve the
     conflict.

     EXAMPLE:  To disable the line DEVICE = C:\NWDOS\EMM386.EXE
               /FRAME=AUTO add the REM comment to the beginning
               of the line:

               REM DEVICE = C:\NWDOS\EMM386.EXE /FRAME=AUTO

     If a line is not causing the problem, it can be reactivated
     by removing the REM statement.


     USING ?

     You can also use the Novell DOS 7 conditional "?" statement
     or F8 function key to activate or deactivate CONFIG.SYS and

     AUTOEXEC.BAT commands.  If you use this option, make note of
     whether you answered "yes" or "no" to loading each line.


     USING THE /EXCLUDE OPTION

     If the hardware documentation does not specify a memory
     range to be excluded, you can use the /EXCLUDE option to
     determine whether an upper memory conflict exists.  This
     option is used to systematically exclude sections of upper
     memory from being used by EMM386.EXE.

     For example, use this method to exclude the top half of the
     upper memory range first, reboot the computer and test the
     problem.  Then, if the problem recurs, change the /EXCLUDE
     setting to exclude the lower half of upper memory and reboot
     to retest.

     After discovering the half of upper memory in which the
     conflict resides, repeat the process by dividing that memory
     range in half.  You can use this technique to break down the
     entire upper memory range, half-by-half, until you pinpoint
     the area of conflict.

     You must use the hexadecimal notation of the memory address
     with the /EXCLUDE switch.  The following brief explanation
     is provided for those unfamiliar with using the hexadecimal
     system.


     HEXADECIMAL ADDRESSES

     The 384 KB range of upper memory resides between the
     hexadecimal memory addresses of A000 and FFFF.  The upper
     half of this range lies between the addresses D000 and FFFF;
     the lower half lies between A000 and CFFF.  Because A000 to
     BFFF is typically reserved for video display, you will
     normally work only with addresses C000 to FFFF.

     To exclude the lower half of the C000 to FFFF range, enter
     the following /EXCLUDE command in the EMM386.SYS or
     HIDOS.SYS line in the CONFIG.SYS file:

          /E=C000-DFFF

     Reboot the computer to test the exclusion.  If the problem
     persists, edit the /EXCLUDE switch to exclude the other half
     of the C000 to FFFF range by entering the following in the
     CONFIG.SYS file:

          /E=E000-FFFF

     Continue excluding smaller and smaller range of memory until
     you have found the smallest possible exclusion that still
     permits proper functioning.

     NOTE:     The first address in each range of memory
               (EXCLUDE, INCLUDE, and so forth) must end in "00"
               and the second must end in "FF."  You can also
               exclude multiple memory ranges with the /EXCLUDE
               switch by separating the ranges with a comma as

               shown in the following example:

               Example:  /E=D000-D7FF,DA00-DBFF

     The following chart shows how this process works and shows
     the memory address for the 64 KB range in the "D" segment of
     upper memory.

     D000-DFFF = 64K = D000-D7FF = 32K + D800-DFFF = 32K = 64K
     TOTAL
     D000-D7FF = 32K = D000-D3FF = 16K + D400-D7FF = 16K = 32K
     TOTAL
     D800-DFFF = 32K = D800-DBFF = 16K + DC00-DFFF = 16K = 32K
     TOTAL
     D000-D1FF = 8K + D200-D3FF = 8K = 16K TOTAL
     D400-D5FF = 8K + D600-D7FF = 8K = 16K TOTAL
     D800-D9FF = 8K + DA00-DBFF = 8K = 16K TOTAL
     DC00-DDFF = 8K + DE00-DFFF = 8K = 16K TOTAL

     (The first "D" in each hex address above can be replaced
     with C, E, or F when working with those segments.)

     After you find the conflicting range of upper memory,
     permanently exclude it from being used by EMM386.EXE or
     HIMEM.SYS by using the /EXCLUDE switch.

     ADDITIONAL REFERENCES:   DOSBOOK COMMANDS, CONTENTS,
                              CONFIGURING, or INDEX
