---------------------------------------------------------------- UNDERSTANDING AND MANAGING MEMORY ---------------------------------------------------------------- With so much information to absorb, a tutorial on the topic of computer memory seems dry and uninviting. Computer novices and advanced users alike might be tempted to sidestep the topic of computer memory. After all, if you just want to USE the computer to accomplish a task isn't it enough to know that data is stored in either RAM (random access memory) integrated circuit chips or on a disk drive and leave the troublesome details to the computer? Hardly... If you want to get serious about configuring your computer for speed, be able to switch between several software programs quickly, troubleshoot mysterious software problems or optimize your computer for larger data processing tasks - learning to manage memory is an ESSENTIAL survival skill. The tricks and reference ideas presented in this tutorial make the difference between a computer that simply does the job and a computer that flies through piles of work. Later in this tutorial we will present some unusual "power user" tips to manage computer memory effectively. But first, let's step back, take a breath a pull together a few basic concepts from previous tutorials. Computer memory is divided into two types. Disk storage which is long term storage. And RAM (random access memory) which is short term storage. RAM is only active as long as power is supplied to the computer. In a physical sense, RAM exists within small integrated circuit "chips" housed within the computer. A byte is simply computer-speak for a character of information within a RAM chip memory area of the computer. Think of a byte as a small filing cabinet drawer in a busy office. The letter "A" occupies one byte of information. A kilobyte is roughly 1,000 bytes of information. Actually it is 1,024 bytes or the number two multiplied to the eighth power since computers deal in binary math. A kilobyte is actually a small amount of storage space - perhaps a short business letter in size. A kilobyte can be written as 1K. A megabyte is a million bytes - 1M written in computer shorthand. These terms are frequently abbreviated as kilo (or K), mega (or M) and giga (or G). You may also see KB for kilobytes or MB or MEG for megabytes. Some memory storage areas of the computer cannot be changed, however. ROM or read only memory is also held in special computer chips. These chips do not lose their information when power is removed. ROM chips contain special startup instructions used when the computer is first turned on as well as specific instructions such as how to use the disk drives and computer memory. ROM memory is fixed. RAM memory, however, is flexible and can be configured to suit different needs. To make things a little more interesting, RAM is available in two "flavors" or types. Dynamic RAM, sometimes abbreviated as DRAM which is relatively inexpensive and is the most common type of memory used in computers today. A second type, static RAM (or SRAM), is similar to DRAM but much faster in operation. Static RAM is usually configured for very fast "cache" memory which the central processor uses for temporary storage when DRAM would slow processing operations. Many computers do not contain SRAM and for the most part this tutorial deals with the management of dynamic RAM or DRAM; and this is where the majority of your data and software resides when the computer is operational. To make the next jump in understanding we need to draw a map. Pay close attention, because understanding and managing this map of computer memory is where the secrets and tricks to boosting computer performance lie. We will dissect this map carefully in the paragraphs which follow... ------ A map of RAM computer memory ------ Conventional Memory Upper Memory Extended Memory 0K 640K 1Meg | ---------------------|--------------------|--------------------> xxxx xxxxxxxxxxxxxxxxxx xxx xxx xxx xxx xxx xxx xxxxxxxxxxxxxxxxx | | | | | | | | | | | | | | | | video | window for | extended memory (XMS) hardware code, | | expanded | where software can system data, | | memory (EMS) | be relocated device drivers, | | | memory resident | useful upper | programs | memory blocks | | or UMB high memory area | (HMA), the first free conventional 64K of extended memory: for programs memory Tip: we will be referring to this map frequently so you might want a paper copy for frequent reference. Simply make sure the map is fully on your screen, turn on your printer and tap the Print-Screen key, sometimes abbreviated PrtSc or PrtScrn. If that does not work, try pressing the shift key (and hold it down) and then press the Print Screen key. Keep the map close by as our tutorial unfolds! The above map of RAM memory looks technical and complex, but is actually quite simple. As we describe each section of the map, flip back and take a glance to refresh your "visual" understanding of this map. Once you understand this memory map you can "rearrange" how the DRAM memory of your computer is used for more effective, speedy computing! The above map is analogous to a long wall of filing cabinet drawers. Each drawer can contain a computer piece or byte of information. Obviously, since we are dealing with millions of bytes this is a VERY long wall of filing cabinet drawers! Each filing cabinet has an address or location. The central processor in the computer also uses an addressing scheme to locate information in RAM memory. Note that the central processor in the computer can either read information from RAM or write information to RAM. RAM is somewhat like paper - it can store information. And the central processor holds a pencil and eraser so that it can read and write information as needed. At the far left at 0K (zero thousand bytes of information) we notice that the RAM memory "filing cabinet drawers" store hardware code and system data including the MSDOS operating system itself. Normally device drivers and memory resident programs (TSR's) are stored in this area as well. Moving to the right, next we see the free conventional memory where software such as a spreadsheet or word processor is held. This is the main memory area which concerns computer users and it is this area which can and should be maximized for effective computer use. Moving further to the right we see an important boundary exists at the memory location of 640K (640 kilobytes). It is here at the DOS 640K boundary that DOS does not normally allow a program to access further RAM memory. This is a design decision which was made when the first IBM desktop computer was manufactured and is based on the microprocessor selected at that time (8088 CPU) and considerations of where to place video and disk drive memory access on those early machines. Although this 640K boundary was not meant to be crossed by software, clever memory management techniques will allow you to use RAM memory above the 640K barrier. Moving further to the right along the map we see the upper memory area which lies between 640K and 1 Meg. This memory is unique in that it is normally used to address hardware devices like your video monitor and disk controller which need a spot in memory to do their work. However some of this upper memory area can be reclaimed for other uses. One of the earlier schemes to reclaim this area was an memory management scheme called expanded memory sometimes abbreviated as EMS. Finally, beyond the memory location at 1 Meg lies true extended memory which can be used for a variety of fascinating purposes - either actively by configuration of the user or passively by software which will detect and use expanded memory. Extended memory is abbreviated as XMS. Note that extended memory (XMS) can be installed in large amounts. A computer can have 2 Megs of memory, 4 Megs, 16 Megs and even more! The first 64K of extended memory is called the high memory area, sometimes abbreviated as HMA. The secrets of memory management, then, lie outside or above the conventional 640K of RAM memory. Although 640K of conventional memory (640,000 bytes) sounds like a lot of RAM memory, today's advanced software uses memory voraciously! Let's pause for a moment and define the three specific types of memory seen above. CONVENTIONAL MEMORY. The first 640K of RAM memory. Conventional memory is used by applications software such as databases and word processors. It is sometimes called DOS memory. You can never have more than 640K of conventional memory due to the design of the original IBM PC. All PC clones share this conventional memory similarity. In order to use memory beyond 640K you need to use special memory management software which is contained in later versions of DOS (versions 5.0 and 6.0) or a commercial or shareware memory management software package. Clever memory management can move some portions of DOS itself and the operating system out of conventional memory where it normally resided into upper or extended memory areas of RAM. This frees more conventional memory for use. Likewise, memory resident software programs and TSR's such as popup calendars, notepads and calculators can be moved out of conventional memory into upper or extended memory areas. EXTENDED MEMORY. RAM memory which resides from the normal 1MB DOS limit to the top address limit of the CPU (central processing unit). This means to the top limit of the memory you have installed in the machine - 8 Megs of memory, for example. Using special software it is possible to convert extended memory to expanded memory. Extended memory is useful for software tasks like RAM disks, print buffers and other applications. Many software applications such as databases and spreadsheets can use extended memory for large tasks. Extended memory is also called XMS memory. EXPANDED MEMORY. RAM memory which can be accessed only through a "window" or "page frame" set up inside the first 1 Megabyte of RAM. The usual limit of expanded memory is 32MB. Segments of this memory are quickly "paged in and out" of the memory window to create an illusion to the central processing chip of a large amount of memory - something like flipping the pages of a cartoon book to animate a story. Many applications such as spreadsheets and databases can use this memory to handle large tasks. Expanded memory is also called EMS memory. This type of memory is not commonly used today and was an early memory management standard. However, some software still supports this system. If you see references to LIM 3.0 or LIM 4.0 this is a clue that expanded memory can be used. Remember, extended memory can be converted to expanded memory using special software. Within DOS versions 5.0 and 6.0 a special software utility can make extended memory operate as expanded memory. This DOS utility is called EMM386 and only works on 80386 or higher central processors. Lotus, Intel and Microsoft Corporations (the letters of each company gave rise to the LIM specification) developed the early expanded memory management scheme when it was realized that early spreadsheets and other software needed more space than the existing 640K of conventional memory. Of the two types, extended memory and expanded memory, today's software is usually configured to use extended memory if available. Even older XT computers, those using the 8088 processor, can use expanded memory if an additional memory circuit board is installed. However XT class machines cannot use extended memory which is only available to machines using 80286, 80386 and 80486 processors and their variants. A concrete example to keep things simple. A customer might purchase a computer with 4 Megs or 4MB of memory. Of this, 640K is conventional memory. 384K is upper memory and the final 3M (3 Megs) is extended memory. Early XT class computers using the 8088 processor had only 640K of RAM or possibly 1 Meg of RAM. Users of AT class machines using the 80286 central processor frequently install between 2 Megs and 4 Megs of RAM. Owners of computers housing 386, 386SX, 486 or 486SX processors are able to access more than 16MB (16 megabytes) of RAM. However, 4 to 8 Megs of RAM is considered a comfortable amount of memory on modern machines. A few "power users" may install 16 Megs or more of RAM memory. Note that XT computers using 8088 central processors cannot use extended memory. Software programs that can run directly in extended memory are sometimes called DOS-extended programs. These types of programs can tell the central processor to switch to a special PROTECTED mode of operation for greater RAM memory access. Protected mode processors such as those based on the 80286, 80386 and 80486 can switch to protected mode to address greater amounts of memory. These processors switch from REAL mode into PROTECTED mode to address greater amounts of memory. The lowly 8088 processor used in the first IBM PC's operated only in REAL mode. Today many software programs use DOS extenders within their software code which allow computers to run in protected mode and thus address greater amounts of memory. Although commercial software memory management utilities exist such as QEMM-386 and QRAM (from the Quarterdeck Company) and 386MAX (from the Qualitas Company), DOS itself contains valuable software utilities to also accomplish the job. Note that users of DOS versions 5.0 and 6.0 have a variety of tools which can be used to configure memory for more efficient use. If you are not sure what version of DOS you have, simply type the DOS version command at the DOS prompt: VER . DOS will tell you what version you are running. The extended memory management utility program contained in DOS versions 5.0 and 6.0 is called HIMEM.SYS. It allocates and manages memory so that no two software programs try to use the same chunk of memory at the same time. A HIMEM.SYS statement is normally added to the CONFIG.SYS file which resides in the root directory of your hard drive. Let's roll up our shirt sleeves and study HOW to manage memory. Be sure to glance at the memory map presented earlier in this tutorial to visualize what you are doing as this section of the tutorial progresses. Remember that many of these DOS commands and functions are ONLY found in DOS 5.0 and 6.0. Users of earlier versons of DOS can use special commercial and shareware utility software to emulate these functions if they do not own or wish to purchase DOS 5.0 or DOS 6.0. ---------------------------------------------------------------- THE DOS MEM COMMAND PRODUCES ESSENTIAL REPORTS ---------------------------------------------------------------- If you are using DOS version 5.0 or 6.0 here is your first homework assignment. Use the MEM command to give you a report of the programs in memory, type of memory your machine contains and totals of each type of memory. At the DOS prompt type the command: MEM /C PRN Want the report printed to a small file for reading later? To create a report named CATFISH.TXT try this: MEM /C>CATFISH.TXT MEM syntax is: MEM [/CLASSIFY|/DEBUG|PROGRAM] Parameters: /CLASSIFY Provide list of programs in conventional and or /C upper memory /DEBUG Provide list of programs and device drivers or /D loaded in memory /PROGRAM Provide list of programs in memory or /P The /C parameter switch is perhaps the most useful for determining contents of upper memory and may called from a batch file such as AUTOEXEC.BAT to confirm critical upper memory every time your machine is started! Be sure to run the MEM /C command from time to time as you tinker with memory. This is VITAL to achieving optimum memory configuration. ---------------------------------------------------------------- TINKERING WITH CONFIG.SYS AND AUTOEXEC.BAT ---------------------------------------------------------------- The key to tinkering with memory is to rearrange the commands within two files usually stored within the root directory of your hard drive. These special configuration and start up files are CONFIG.SYS and AUTOEXEC.BAT. They are discussed in the advanced DOS tutorial and the batch file tutorial in a earlier section of PC-Learn so you might want to read those two tutorials a second time to brush up a bit before proceeding. To change the commands and statements within CONFIG.SYS and AUTOEXEC.BAT we need a text editor or word processor - DOS versions 5.0 and 6.0 provides a simple editor called EDIT.COM. To load a file named CONFIG.SYS into the editor simply type the command: EDIT CONFIG.SYS. For hard drive users, since CONFIG.SYS usually resides in the root directory of the hard drive, the command might instead be EDIT C:\CONFIG.SYS. Then you can change and rearrange statements in the file. When you are done tinkering simply use the editor to save the file back to disk in the newly revised version. Be SURE to save a spare copy of both CONFIG.SYS and AUTOEXEC.BAT on a spare floppy disk just in case your tinkering leaves your machine operating poorly. If necessary you can then reboot the computer from a fresh copy of DOS on floppy disk and then recopy the old versions of CONFIG.SYS and AUTOEXEC.BAT back to the hard drive root directory. If you are using your word processor to affect changes in CONFIG.SYS or AUTOEXEC.BAT be sure to save the file in pure ASCII format and not WordPerfect or Microsoft Word format! Let's get to work... Assuming you have a computer with 80286, 80386 or 80486 processor and MORE than 1 Meg of RAM memory you can load DOS itself into the high memory area. You must be running DOS 5.0 or 6.0 to use this trick. Add the following two lines as the FIRST two statements of your CONFIG.SYS file: C:\DOS\HIMEM.SYS DOS=HIGH When you have done this, reboot your computer to let the revised CONFIG.SYS take charge! Test available memory by running the test utility MEM /C. HIMEM.SYS is the high memory manager of DOS. The two lines given above must be placed as the FIRST lines before other upper memory mangers or statements within the CONFIG.SYS file (for example, before EMM386.EXE is loaded). The command DOS=HIGH tells DOS to load itself in the high memory area. ---------------------------------------------------------------- LET'S TINKER WITH THE UMA ---------------------------------------------------------------- Memory resident programs, also called TSR's (terminate and stay resident software) can also be moved out of conventional memory into the UMA (upper memory area) of extended memory. This is done by using the software utility found in DOS 5.0 and 6.0 called EMM386.EXE. Note that EMM386.EXE will ONLY work on 80386 and 80486 computers (as well as their close cousins, the 80386SX and 80486SX computers). We will add another line or so to the CONFIG.SYS file to accomplish this. Note that you can add several parameters to the EMM386 command. The command has several variations. For example, you might want to tell EMM386 to NOT create expanded memory from extended memory. This is done by inserting the following command in the CONFIG.SYS file and then rebooting the computer: DEVICE=C:\DOS\EMM386.EXE NOEMS Note the word "NOEMS" which sets the computer so that extended memory is NOT used for expanded memory. However, if you want to convert 2 MB of extended memory to expanded memory and also want EMM386 to manage DOS programs in extended memory add this command to CONFIG.SYS: DEVICE= C:\DOS\EMM386.EXE RAM 2048 ---------------------------------------------------------------- LET'S LOAD TSR'S AND DEVICE DRIVERS INTO UMA ---------------------------------------------------------------- Let's load device drivers and TSR programs into the upper memory area (UMA). First, run the MEM /C command and study the report. Find the entry marked "largest available upper memory block". Next determine the size of the largest device driver listed in the conventional memory list that could fit into this vacant space in memory. Let's say that somewhere in your CONFIG.SYS you are using the device driver ANSI.SYS which is currently loaded into the conventional memory area. To send it into the upper memory area CHANGE this command in CONFIG.SYS: DEVICE=C:\DOS\ANSI.SYS to this new command: DEVICEHIGH=C:\DOS\ANSI.SYS Reboot the computer, run the MEM /C command and study the result. As you locate areas in upper memory which are free, try to tuck device drivers such as ANSI.SYS and others into upper memory by modifying the DEVICE= statement into the DEVICEHIGH= statement. Device drivers such as DOSKEY, GRAPHICS, and MOUSE drivers can all be loaded into upper memory using this tip! You further modify this technique by adding the following statement to the DOS=HIGH command that we placed in CONFIG.SYS. Instead of seeing this statement: DOS=HIGH We would see this statement: DOS=HIGH,UMB This modification tells DOS that programs are loaded into the upper memory blocks (programs such as the mouse driver or ANSI.SYS, that we discussed) and that DOS should maintain a sort of "memory link" to them. If you forget to add this switch (,UMB) then DOS will load the devices high into upper memory but will NOT be able to operate them since it does not know they have been relocated. Be sure to use the MEM /C command from time to time to see how you are doing on memory optimization. Be sure to reboot (or restart) the computer each time you make a modification to see the results. Next, a curve ball! The above method works for device drivers (like the mouse driver or ANSI.SYS), but what can be done if you want to load a memory resident TSR program (terminate and stay resident or popup program) into upper memory? Instead of the DEVICEHIGH= command inside the CONFIG.SYS file, use a different command: LOADHIGH. But be careful! The LOADHIGH command is used ONLY in the AUTOEXEC.BAT file, NOT in the CONFIG.SYS file. For example, a computer user might be running the TSR program DOSKEY which is a useful macro processor found in DOS versions 5.0 and 6.0. Instead of this command in the AUTOEXEC.BAT: DOSKEY the following memory efficient command might be used in AUTOEXEC.BAT: LOADHIGH DOSKEY ---------------------------------------------------------------- BEFORE AND AFTER OPTIMIZATION: EXAMPLES ---------------------------------------------------------------- Sometimes it is helpful to study actual examples of memory optimization. With that in mind, listed below are some sample CONFIG.SYS and AUTOEXEC.BAT files both before and after memory optimization. Remember that these two files normally reside in the root directory of your hard drive C:\ Be sure to save your original files on floppy in case you your tinkering produces unworkable results. CONFIG.SYS (BEFORE OPTIMIZATION) DEVICE=C:\DOS\ANSI.SYS FILES=20 BUFFERS=30,8 CONFIG.SYS (AFTER OPTIMIZATION) DEVICE=C:DOS\HIMEM.SYS DOS=HIGH,UMB DEVICE=C:\DOS\EMM386.EXE NOEMS DEVICE=C:DOS\SMARTDRV.SYS 1024 2048 DEVICEHIGH=C:\DOS\ANSI.SYS FILES=20 BUFFERS=30,8 AUTOEXEC.BAT (BEFORE OPTIMIZATION) PROMPT $p$g PATH C:\;C:\DOS;\C:\GAMES C:\DOS\DOSKEY.COM C:\DOS\MOUSE AUTOEXEC.BAT (AFTER OPTIMIZATION) PROMPT $p$g PATH C:\;C:\DOS;\C:\GAMES LOADHIGH C:\DOS\DOSKEY.COM LOADHIGH C:\DOS\MOUSE ---------------------------------------------------------------- MORE EXAMPLES ---------------------------------------------------------------- Here is a typical minimal CONFIG.SYS for a 80286 computer having only 1 Meg of memory: DEVICE=C:DOS\HIMEM.SYS DOS=HIGH DEVICE=C:\DOS\SMARTDRV.SYS 256 128 FILES=20 BUFFERS=4 STACKS=0,0 The first line loads the memory manager HIMEM.SYS which works only with 80286, 80386 or 80486 machines. Line two loads DOS into high memory. Line three loads the hard disk cache which comes with DOS, SMARTDRV. 256 is the maximum size for the disk cache and 128 is the minimum size. If only one number is given this is automatically the maximum size for the cache. The next line means that up to 20 DOS files can be open at one time. The next line referring to buffers allocates memory for data to be retrieved from the disk drive. Buffers can probably be decreased since SMARTDRV.SYS performs many of the same functions as buffers and is faster. The final statement referring to STACKS allows even more memory to be squeezed from the machine. Most programs should run fine with STACKS=0,0 but if some programs lock up you can remove this line. Any references to EMM386.EXE are omitted from this CONFIG.SYS because 80286 based machines cannot use that utility. Next, a typical CONFIG.SYS for a more powerful 80386 or 80486 machine. DEVICE=C:DOS\HIMEM.SYS DOS=HIGH,UMB DEVICE=C:\DOS\EMM386.EXE NOEMS DEVICEHIGH=C:\DOS\SMARTDRV.SYS 256 128 FILES=20 BUFFERS=4 STACKS=0,0 The interesting differences here are that the EMM386 memory manager is loaded including the ,UMB switch. Also the DEVICEHIGH statement is used to load SMARTDRV.SYS driver high. If you have a 80386 or 80486 machine with at least two megabytes of memory or more you can increase the SMARTDRV.SYS statement from this: SMARTDRV.SYS 256 128 to this: SMARTDRV.SYS 1024 256 This increases the size and performance of the SMARTDRV system which your hard drive uses. Conversely, if you run Windows 3.1 and have trouble running in a higher mode you might change SMARTDRV.SYS to this: SMARTDRV.SYS 128 ---------------------------------------------------------------- POWER USER TIPS ---------------------------------------------------------------- If you are not using DOS 5.0 or 6.0 and are interested in upper memory and extended memory management, you can buy commercial or shareware programs to accomplish the same goal. Contact the shareware vendors listed elsewhere in PC-Learn (see the SOFTWARE RESOURCES tutorial). Two popular shareware memory managers are the DOS 5.0 Memory Kit and The Last Byte Memory Manager which are available from many shareware disk vendors. Commercial software memory management utilities are QEMM-386 and QRAM (from the Quarterdeck Company) and 386MAX (from the Qualitas Company). The last two should be available from most retail software outlets. Novice DOS 6.0 users can use the sophisticated MEMMAKER utility to automatically configure the CONFIG.SYS and AUTOEXEC.BAT files! For more information regarding MEMAKER and additional DOS 6.0 memory configuration refinements, read the DOS 6.0 tutorial elesewhere within PC-Learn and also review the MEMMAKER notes which can be accessed via the DOS 6.0 HELP facility. Simply type the following DOS command at the DOS prompt: HELP MEMMAKER Using another clever memory management scheme, DOS 6.0 also gives users the option to select from a menu of various CONFIG.SYS and AUTOEXEC.BAT files upon startup. Users can thus start the comptuer in the morning with a memory configuration optimized for Windows and later in the day restart the computer and select a menu option with memory reconfigured and optimized for a DOS database program. Read the DOS 6.0 tutorial elsewhere in PC-learn and study the "multiple configuration option." This option is also discussed in the DOS 6.0 HELP facility. Type the following command at the DOS prompt: HELP MULTI-CONFIG The LOADHIGH statement, used in the AUTOEXEC.BAT file, can be abbreviated to LH if you prefer. LOADHIGH works on only 80386 or 80486 machines. 80286 computers can use the DOS=HIGH command to load DOS into HIGH memory and free more conventional memory for applications. Never try to relocate HIMEM.SYS or EMM.EXE into the UMA using the DEVICEHIGH command! These programs MUST reside in conventional memory! Load HIMEM.SYS before EMM386.EXE. Always add the ,UMB switch to the DOS=HIGH command BEFORE you load device drivers and TSR (memory resident programs) into the UMA. Don't try to use EMM386.EXE on 8088, 8086 or 80286 computers. Always load the proprietary device driver required by your own EMS (expanded memory board) and all device drivers that use extended memory BEFORE you load EMM386.EXE and immediately AFTER loading HIMEM.SYS and do NOT try to use EMM386.EXE to simulate EMS (expanded memory) if another expanded memory manager is already present. Sometimes a software program may use its own internal memory manager or DOS extender. If a program works fine before you use EMM386.EXE and fails after installing EMM386.EXE, contact the program's manufacturer. You may need an update to your spreadsheet or database package so that it is compatible with EMM386.EXE. If you use Windows 3.0 which contains older versions of EMM386.EXE and HIMEM.SYS programs, delete those versions and use the newer versions which come with DOS 5.0 or 6.0. When using DOS 5.0 or 6.0 memory management tricks, remember that EMS (expanded memory) managers use a small portion of UMA which resides between 640K and 1 Meg for the EMS page frame. This page frame memory requirement of EMS memory produces a smaller amount of UMA memory for DOS to relocate device drivers and TSR memory resident programs. Thus if you do not need EMS memory DO NOT load or configure it! Usually spreadsheets are the most frequent candidates for expanded memory - most other software applications can use extended memory. If you are trying to load memory resident TSR programs into high memory remember these tips: You must have at least 350K of extended memory, and the CONFIG.SYS file should contain the statement DEVICE=HIMEM.SYS which must appear prior to any other DEVICE commands. The CONFIG.SYS file must also contain either one of these statements: DOS=UMB or DOS=HIGH. Further, CONFIG.SYS should also contain a DEVICE=statement for EMM386.EXE which includes one of these two switches: /NOEMS or /RAM and EMM386.EXE command must appear after the HIMEM.SYS statement but prior to any DEVICEHIGH statements. Finally, a DEVICEHIGH statement must be available for each device driver which is to be loaded into upper memory and the AUTOEXEC.BAT file must contain a LOADHIGH statement for each memory resident program to be run in upper memory. Tutorial finished. Have you registered PC-Learn to receive your bonus disks? Registration is encouraged. Shareware works on the honor system! Send $25 to Seattle Scientific Photography, Department PCL6, PO Box 1506, Mercer Island, WA 98040. Latest version of PC-Learn and two bonus disks shipped promptly!