Advanced Memory Topics Windows/286 and Windows/386 Up to Version 2.11 Rick Masters MS Electronic Support Services CIS ID# 76701,270 version 1.00 10/24/89 Note: Although carefully compiled, the information in this document is subject to error. If you believe you have found a mistake, please leave a message with one of the current Section Leaders in the Windows Applications section of the Microsoft Applications forum (GO MSAPP) on Compuserve. Topics Conventional Memory Extended Memory LIM 3.2 Expanded Memory LIM 4.0 Expanded Memory Large Page Frame LIM 4.0 Expanded Memory Backfilling Windows Command Line Switches WIN.INI Switches Hardware Rom Conflicts Himem.sys "Memory Configuration Altered..." error message Differences Between Windows/286 and Windows/386 Dos Applications Multitasking Swapping Smartdrive and Expanded Smartdrive Ramdrive Balancing Memory Use Conventional Memory In 1981, IBM introduced its Personal Computer, based on the Intel 8086 processor. The IBM PC was capable of addressing 1 Megabyte of memory. Subtracting the 384K reseverved for hardware mapping, a full 640K was available for use by an application. This 640K is now referred to as Conventional Memory. Extended Memory Extended memory, the simplest type of add-on memory to understand, is simply a seamless continuation of the origrinal 1 megabyte conventional address space on 80286 and 80386 computers. It's important to remember that a standard 640K computer actually has 1 megabyte of address space. That's 640K plus 384K. The additional 384K address space is reserved for the system; it includes the video memory and the system BIOS (Basic Input Output System). This 384K "system-use" space always sits in the same exact place in the address space - from 640K to 1 megabyte - even if you only have 256K actual memory installed in your machine. Extended memory starts exactly where the 384K system space leaves off, therefore Extended memory always starts at the 1 megabyte address space boundary. Extended memory is not used by many application programs for a couple of reasons. First, computers based on the 8086 (such as the IBM PC and XT) CANNOT access Extended memory. This is a limitation of the 8086 processor. There is no way for the processor to directly access memory addressed above one megabyte. The 80286 and 80386 processors contain the ability to access memory over 1 megabyte, but most copies of software have been for 8086 based computers. Therefore, most application developers have ignored the special abilities of these advanced processors in order to remain compatible with the existing base of computers. The second reason Extended memory has not been used by developers is the lack of an accepted standard for accessing Extended memory. A standard allows more than one program or device driver to allocate Extended memory at the same time. There have been two psuedo standards for accesing Extended memory as well as a third, fully specified standard finalized by Lotus, Intel, AST and Microsoft (with input from many other vendors) in July of 1988. The first "standard" used a bottom-up approach to accessing memory. This was introduced by the the IBM driver VDISK.SYS, a RAM disk program released with DOS Version 3.0. Other programs could utilize the memory above that used by VDISK by reading a header located in Extended memory which indicated the amount of memory utilized and included a pointer to the next header. The second standard is the INT 15h method. When a DOS program executes interrupt 15H, function 88H, DOS returns the amount of Extended memory available. A program can then use part of that memory, from the top-down. It then takes control of the interrupt. When another program asks how much Extended memory is availably, it indicates that the amount of Extended memory available is equal to the true amount available minus what it has used. Therefore, the new program will not try to use more than the first program says is alright. Microsoft's Ramdrive and Smartdrive use this method. An example can be given for a 2 meg machine. Let's say you configure Smartdrive to have 512K and a Ramdrive of 512K. When the computer starts, Smartdrive ask DOS how much extended memory is available. DOS returns 1 Megabyte (1024K). Then, Smartdrive installs itself in the top 512K of the Extended memory and takes control of interrupt 15h. Then, Ramdrive executes interrupt 15h to see how much Extended memory is available. Smartdrive, acting as DOS, lies and says 512K. So, Ramdrive uses the bottom 512K of Extended memory, which is out of Smartdrives way. This method of using Extended memory is inheriantly incompatible with the bottom-up method of using Extended memory. A third standard, which was jointly agreed upon, as mentioned above, is the Extended Memory Specification 2.x (XMS). This specification provides function calls for Allocating, Moving, and Releasing Extended memory (and other additional functions). The device driver HIMEM.SYS provides this capability, as well as other functions which will be described further on. This driver must use the first part of Extended memory, and therfore is incompatible with VDISK. Note, the latest version of VDISK.SYS shipped with version 4.00 of PC-DOS is compatible with HIMEM.SYS. One can assume it is either using the INT15h, or XMS method of allocating Extended memory. Expanded Memory Although there exists methods for accessing Extended memory using the "Protected Mode" of the 80286 and 80386 processors, the 8086 processor does not have this capability. How does the 8086 utilize more than 640K, one might ask? To meet the need for more memory, the Expanded Memory Specification was introduced in 1984. This specification works through a combination of software drivers and special memory hardware. We'll start this discussion with an explanation of the LIM 3.2 specification. LIM stands for Lotus/Intel/Microsoft, who jointly established the specification. In order to understand how EMS works, it is helpful to understand what the designers of EMS had to work with. First, the 8086 processor cannot access more than 1 megabyte. Second, hardware can be addressed in the area between 640K and 1024K which can be written and read from. An example of this is the EGA memory. When you write to the EGA screen, you are actually writing to memory stored on a hardware expansion card that you have inserted into one of the slots of your computer. What needed to be defined was a way to have the hardware make more memory available than there was address space to access that memory. The idea is to have the hardware place a chunk of RAM (random access memory) in the address space (say, between 768K and 832K), allow you to access it, then switch in a different chunk of memory into THE SAME address space, and allow you to access the new memory chunk. The first memory chunk is not gone, it is switched away on the memory card, and is just temporarily unavailable. The end result is that your program can access more than one 64K block of memory, using the same 64K block of address space! An application communicates with an EMS device driver in order to control which block of memory it wants to access at a given moment. The EMS driver in turn, controls the hardware in order to make the requests of the program happen. The EMS driver also can reserve blocks for more than one program at the same time. EMS blocks are sized in multiples of 16K. LIM 3.2 requires that there be 4 contiguous 16K blocks of address space available (not used by other hardware), totaling 64K. If this is not available, the LIM 3.2 driver will not provide Expanded Memory. The 16K segments are referred to as an "EMS page". The total group of 16K segments is called the "EMS Page Frame", which as just mentioned, must be at least 64K in size for LIM 3.2. The block of address space that memory is swtched in and out of is also referred to as the "EMS bank". When the EMS driver switches in a block of memory, the old block of memory is said to be "banked" out to the Expanded memory pool available on the EMS card. A new memory block is then "banked in". Remember, information is NOT being physically copied from the EMS card to the RAM of the computer. That would be "swapping", while this process is bank switching. The device driver simply changes the card's page registers, and a new block of memory from the Expanded memory card is available to access. LIM 4.0 Expanded Memory In August of 1987, the LIM 4.0 specification was completed. This specification is based on the same "bank-switching" technology, but contains some differences, that while very useful, added a complexity to the Windows memory managment scheme that users are still trying to decipher. In LIM 4.0, it is no longer necessary to have four continuous 16K segments available. If only one is available, Expanded Memory is provided. The size of the Page Frame can range from 16K to 1024K and can be discontinuous. Also, part of the Page Frame can reside below 640K. This last significant fact is taken advantage of by Windows to provide multitasking of Windows applications. Large Page Frame EMS Large Page Frame EMS is acheived when there is a Page Frame in the memory area below 640K. If there is no Page Frame below the 640K memory line, the EMS driver is in Small Page Frame. Windows will utilize Large Page Frame if there is approximately 288K available conventional memory to create an EMS page frame. This is necessary to be able to start large applications. In this case, multitasking of large applications is possible. Here is a typical scenario: A user loads a program such as Excel. Windows places Excel in the EMS bank located below 640K. Let's say that the bank is 384K in size. The user continues to work as normal, and no bank switching occurs. But, then, the user decides to take a chart from Excel and paste it into PageMaker. So, the user double-clicks on PM.EXE, in order to start PM. At this time, Windows "banks" Excel out to the pool of Expanded Memory, and "banks in" a fresh block of memory to load PM into. Once PM is loaed, Windows multitasks the applications. Let me explain how Windows multitasks Windows applications under Large Page Frame EMS. Windows is a message based operating system. That is, a program executes whenever it is processing a message (such as mouse movements or keyboard activity). Whenever a program is done processing a message, Windows distrbutes a message to another application, and then that app executes. Under Large Page Frame, when Windows needs to pass a message to an application, it "banks out" the current application, and "banks in" the application that needs to process the message. Once it is done processing, the Windows scheduler chooses the next application to receive a message, and performs the same operation. Since bank-switching is performed through changing the values of a few hardware registers on the LIM 4.0 memory card, the bank- switches are almost instantaneous. Applications are constantly being banked in and out, EVEN if they are in icon form. In fact, there are only a few advantages to putting a Windows app in icon form other than saving screen space and reducing the frequency that it receives a message (since it wouldn't receive a message to paint its screen area). How can you achieve Large Page Frame EMS? Under Windows/386 2.1x, if you have enough expanded memory (and Conventional; see above), you will automatically be placed in Large Page Frame. Under Window/286, some hardware modifications are necessary. Since the conventional memory is being replaced by memory from your expanded memory card, it is necessary to disable the conventional memory that is being replaced. Then, your expanded memory card must be configured to replace this conventional memory. Most Expanded memory cards provide a configuration utility for doing this. This technique is known as backfilling. This requires a LIM 4.0 EMS hardware compatible memory card with the hardware registers capable of supporting Large Page Frame. If you are unsure about this, ask the manufacturer before purchasing the card. Plain Extended memory cards will not provide LIM 4.0 Expanded Memory. They simply do not have the registers to perform bank-switching. Problems with Large Page Frame Large Page Frame is not perfect, though. While it does improve your ability to multitask Windows applications, it has its limitations. In order to understand the problems with Large Page Frame, it is necessary to understand a little more about Windows memory management. When Windows is in LPF, the memory in the EMS Bank is being switched in and out of conventional constantly. Some things, though, must ALWAYS be in conevntional memory. Therefore, they must reside in the block below the EMS Bank (or below the Bank Line). These include library fixed code, library data segments, library resources, task databases, EXE headers, and so forth. Therefore, there must always be enough conventional memory below the bank line to hold these resources. If the EMS bank is too large, the amount of memory below the bank-line will be too scarce, and you'll get an "Out of memory" error trying do something like load a printer driver (which would be loaded below the bank line), or print. This can occur even though you may have 5 megs of Expanded memory because Windows ran out of Conventional memory. When a program allocates memory, it is allocated from its own EMS bank (unless they specifically ask for NON_BANKED memory). When a second instance of a program is run, a second data segment is created for it above the bank line. If the EMS bank is too small, the program may run out of its available memory above the bank line. So we see, if the EMS bank is too small or large, an "Out of Memor" error can occur, even though Expanded memory may be plentiful. You won't have to worry about this if you are not in Large Page Frame. If you run out of memory, you've simply filled up ALL of conventional with programs and libraries. You may still have plenty of Expanded memory left, but at least you know you used conventional to its fullest (as opposed to running out of it ONLY above or below the bank line). So, you see, Large page frame isn't always the best, especially if you are running only one application! Windows Command Line Switches From the last section on Large Page Frame, it follows that there are Windows command line paramters to help you manage the size of the Large Page Frame EMS bank. /L-16 (Available since version 2.10D, file dated 9/7/88 or later) This switch moves the Bank line down 16K. The net effect is to increase the size of the EMS page frame by 16K. This is the only allowable negative amount. /L+NNN (Available since version 2.10D, file dated 9/7/88 or later) ---------------- This switch moves the bank line up the specified number of kilobytes. The net effect is to decrease the size of the EMS bank. By moving the line up there will be an increase in conventional memory below the bank line. An example can be shown for Excel. Excel registers the amount of conventional memory available to it in its help box. In large page frame, that is the available memory to Excel, above the bank line. You will notice that the conventional memory reported by Excel will decrease if you move the bank line up. The MS-DOS Executive, however, may report a different story. It reports in its About... box reflect the amount of memory above and below the line when it is banked in the Page Frame. Some applications require a lot of memory below the Bank Line. You will find that they produce an Out of Memory Error, even though there is plenty of Expanded Memory. This is where the /L parameter may improve things. /L+200 (Available since version 2.10D, file dated 9/7/88 or later) ---------------------- This parameter will put Windows in Small Page frame EMS. This is useful if you are running only one large Windows application, and maybe a few small ones also. Windows still has access to Expanded memory, but it can only store the applications that fit through the smaller Page Frame. Things like notepad, cardfile, etc. will easily go into EMS in Small Page Frame, while applications like Excel and PageMaker will have to stay in Conventional memory. Since large applications must stay in conventional, this switch is not recommended for multiple large applications. If you try to run more than one large application in conventional memory, Windows can try to service the request, though. Windows applications can be composed partially of "Discardable" code or resources (like dialog boxes). When Windows is running low on Conventional memory, Windows can discard these memory blocks in order to make way for a new application, or a memory allocation request. When an application needs to use a segment that was discarded, the segment will be reloaded from the .EXE file. This is a good time to mention that the discarding and reloading mentioned above is the extent to which Windows uses the disk for multitasking. Windows/286 and 386 never swap Windows applications to disk and only Windows/286 swaps DOS applications to disk (for convenience, not multitasking). /Ennn (Available since version 2.11) ------------------- Specifies that nnn bytes of conventional memory must be available before Windows will go into Large Page Frame EMS. The default is approximately 288K. That is, if when you start Windows and check the File, About dialog box, if the amount of conventional indicated is 288K or larger, you will be in Large Page Frame EMS. This parameter allows you to change this value. This could be useful to software manufacturers, who know that their program requires a certain amount of conventional memory. Instead of having to evaluate each users memory situation, and decide if Large Page Frame or Small is the best for them, they can just instruct the user to run Windows with the /E parameter set to a specific value. Then, Windows will put itself in LPF or SPF using the threshhold as defined by the software developer. The /E is only valid for Windows 2.11, and therefore has not seen widespread usage. WIN.INI Memory Switches For Windows/286 only: swapdisk= Specifies which location Windows will store itself when a DOS application is running. Also, if multiple DOS applications are loaded, Windows and all DOS applications except the currently running DOS application will be stored in this location. The following are acceptable values for the Swapdisk= parameter in the Windows/286 Version 2.10 or later WIN.INI file: 1. swapdisk=? (question mark, the default) The swapdisk=? parameter tells Windows/286 to automatically choose the drive and directory to perform swapping operations to. 2. swapdisk=/E (forward slash, E) The swapdisk=/E parameter tells Windows/286 Version 2.10 to perform swapping operations to expanded memory. NOTE: this option did not work in Windows Version 2.03. 3. swapdisk=x:\dir (any valid drive and directory) The swapdisk=x:\dir parameter tells Windows/286 to perform swapping operations to the drive and directory specified. The drive and directory must conform to the following: a. They must exist. b. The location cannot be a removable medium (floppy disk, Bernoulli box, tandon data pac). c. It must be at least three times the size of the largest standard application being run. The following examples are NOT acceptable values: swapdisk=384 (Any numeric value - NOT acceptable) swapdisk=? /E (Question mark /E - NOT acceptable) swapdisk=d: /E (Drive letter /E - NOT acceptable) swapdisk=d: e: (Multiple drives - NOT acceptable) Note: Microsoft has confirmed swapdisk=/e to be a problem in Windows Version 2.03. This problem was corrected in Windows/286 Version 2.10. You must update to Windows/286 Version 2.10 or later to correct the problem. Setting the TEMP variable in your AUTOEXEC.BAT file (SET TEMP=C:\TEMP), also sets the location of the swap disk. The swapdisk entry in the WIN.INI overrides the TEMP variable. swapsize= This parameter sets the amount of space to reserve in the conventional memory space as a swap area for DOS applications. The default is swapsize=0, which allows Windows to set the swapsize based on the memory requirements field in the PIF file of the first DOS application run. This has one disadvantage in that this space may not be sufficient for subsequent applications. Therefore, it is recommended that you run the largest DOS applications first, or specifically set swapsize to a higher value. You may edit the entry to read "swapsize=470". This value is in kilobytes and may be adjusted upward to 640K. For Windows/386 only: windowmemsize=640 Sets the size of the first virtual machine. This is the area where Windows applications run. This entry does NOT apply to the size of DOS applications' vitual machines. It is not recommended that this value be changed from the default 640K. It may be perceived that by changing this value, more memory could be gained for running DOS applications. This is generally not the case. Since Windows/386 holds a certain amount of overhead for a DOS application in the first Virtual Machine, you will run out of space for this "overhead" before you will run out of memory that would be used for Virtual Machines. If this value is changed, the emmsize paramter (described below) should be set to 0. This disables Expanded Memory. If this is not done, Windows will try to make up for its lost Virtual Machine size by allocating available Expanded memory. emmsize= Sets the Maximum amount of Extended memory to be converted to Expanded. The default is blank. When blank, Windows/386 automatically converts all Extended to Expanded. The Expanded can be released for creating Virtual Machines if necessary. emmsize=0 Disables Windows/386 expanded memory and creation. This differs from running Windows/386 with the /N parameter. Using /N just tells Windows that it cannot use the Expanded memory that may be available. It would still be available to applications that directly access the Expanded memory driver. By setting emmsize=0, Windows/386 does not create an Expanded memory page frame, for itself or for applications (such as Excel) that directly access Expanded memory. Note: The corresponding Windows/286 action would be to remove the EMS driver from your config.sys. emmpageframe= Explicitly sets the starting location of a 64K EMS page frame in upper memory. An example of this is emmpageframe=D000 This sets the LIM 4.0 page frame at the ROM location D000 (hex). This is at 832K. This is useful if you have a conflict with hardware set at other locations in ROM. Note, this is recommended if emmexclude and emminclude do not seem to set the location of your page frame in the location you desire. This setting can be dangerous, because if you do something like "emmpageframe=C000", you will set your EGA ROM to be mapped as Expanded memory. Windows/386 doesn't check if the address range is already in use. See the Hardware Rom Conflicts section of this documentation for further information about the use of this setting in specific situations. emminclude=D000-D7FF (Windows/386 Version 2.10 or higher) When Windows/386 starts, it tries to find 4 16K blocks of address space in which to place its EMS page frame. In order for applications to access LIM 3.2 Expanded Memory directly through the EMS driver that Windows/386 has built-in, these 4 pages must be continuous. Windows/386 usually scans the locations: C000-DFFF (768K through 895K), looking for address space not allocated by other hardware. If you want to give Windows/386 a range of valid addresses to search through, you can use this setting. emmexclude=C000-C7FF This setting tells Windows/386 to skip certain areas when selecting a Page Frame. This could be useful if you have a video or network card at a specific address, and you want to make sure Windows/386 doesn't try to use this segment for hardware mapping. lastemmseg=D800 This setting tells Windows/386 to stop looking for EMS pages after this address. Windows/386 will test the segment at the location specified for availability, but will not go further. Hardware Rom Conflicts If you have adapters in your computer system which utilize address memory between 640K and 1 Meg, and are having problems with recognizing Expanded memory, there is a possibility that your additional hardware may have an address space conflict with the memory Windows wants to utilize as an EMS page frame. Hardware that utilizes this memory include network cards, high resolution displays (such as the 8514/a), IRMA + 3270 adapters, RLL + ESDI hard drive controllers, and tape backup devices. If you believe you are having a conflict with an adapter, contact the manufacturer and find out what ROM locations the device uses. For Windows/386, use the WIN.INI switches mentioned above (emmpageframe, emmexclude, etc) to locate the Windows/386 page frame in a position which does not conflict with the other devices. If possible, configure your adapters to use a continuous memory range (by configuring them next to each other instead of skipping segments), which will maximize the largest block of address space available for Windows/386's page frame. HIMEM.SYS: High Memory and Extended Memory Manager In Windows/286 version 2.10 or later, Windows has the capability of putting part of itself in extended memory with the help of a driver called HIMEM.SYS. In Windows/386, the HIMEM capability is built-in and HIMEM.SYS should NOT be placed in the config.sys. HIMEM.SYS is a device driver that is installed when you install Windows/286 Version 2.10D or 2.11 for a system which has extended memory available. When HIMEM.SYS is installed, a modified version of Windows is installed that is designed to make use of this driver. This modification permits faster execution of Windows and an increase in conventional memory from 45K to 64K depending on the system. HIMEM.SYS, when installed, loads itself (program code) into low memory (conventional). Whenever any program that can use HIMEM requests anything from it, as does Windows, it reserves up to the first 64K of extended memory. Memory managers, RAM disks, or disk caches that have to use this same memory should not be used with HIMEM.SYS (e.g. CEMM.SYS). HIMEM.SYS is installed in the CONFIG.SYS file during Setup (not Memset). If HIMEM.SYS is removed from the CONFIG.SYS file or disturbed in memory so that it cannot execute correctly, then a message of "Memory configuration has been altered..." is displayed when you type 'win'. If, after checking to make sure HIMEM.SYS is installed in the CONFIG.SYS file correctly, you are still having problems, check for incompatible drivers or TSRs that could be interrupting HIMEM's execution. If you have an EMS (Expanded Memory Specification) board, you can allocate part of its memory (64K is the recommended optimum amount) to extended memory by reconfiguring the board and leaving the rest as expanded. Refer to your EMS board manual for more information about reconfiguring your board. If you are loading other extended memory programs that do not use the XMS interface to manage the extended memory, they should be configured to leave the FIRST 64K of extended memory free. System Requirements To use HIMEM.SYS with your computer, you need the following: 1. An IBM PC/AT, PS/2 (except models 25 and 30), or compatible computer 2. Extended memory 3. DOS 3.00 or higher. Installing HIMEM.SYS To install HIMEM.SYS, include the following command line in your CONFIG.SYS file: DEVICE=[d:][path]HIMEM.SYS [/HMAMIN=h] [/NUMHANDLES=n] When you start your computer, the driver is loaded and the following message is displayed: HIMEM: DOS XMS Driver, Version 2.04 - 8/17/88 Copyright 1988, Microsoft Corp. If you also want to install other device drivers that use XMS calls, place the commands that install them in the CONFIG.SYS file after the above command. HIMEM.SYS Options Following is a description of the two options you can use with the HIMEM.SYS device driver. These need not be used in a normal Windows installation. 1. The /HMAMIN=h option is as follows: The function of this option is to specify the minimum amount of memory a Terminate and Stay Resident (TSR) program can use in the High Memory Area (HMA) allowing controlled access to the HMA. Specify the amount of memory in kilobytes. Programs requiring less space are not placed in the HMA. To ensure the most effective use of this memory area, set the number to the request size of the largest TSR program that uses the HMA. The minimum value is 0, the maximum is 63, and the default is 0. The 0 default allows "first come, first served" access to the HMA. When you use this option, the following message is displayed: Minimum HMA size set to Please note that you will only use the /HMAMIN option when you run two or more TSR programs and/or device drivers that require use of the HMA. 2. The NUMHANDLES=n option is as follows: The function of this option is to set the maximum number of Extended Memory Block (EMB) handles that can be used at any given time. Specify the amount of memory in kilobytes. The minimum value is 1, the maximum is 128, and the default is 32. Each additional handle requires an additional 6 bytes of resident memory. Because it is possible to exceed the default when running several programs, increase the number of allocated EMB handles using the /NUMHANDLES option. When you use this option, the following message is displayed: n extended memory handles available The following command line shows the most common configuration of HIMEM.SYS: DEVICE=HIMEM.SYS The following command line shows a configuration of HIMEM.SYS that ensures that any program using the High Memory Area must use at least 40K of this memory: DEVICE=HIMEM.SYS /HMAMIN=40 The following command line shows a configuration of HIMEM.SYS that uses the maximum number of Extended Memory Block handles: DEVICE=HIMEM.SYS /NUMHANDLES=128 Messages The messages below may appear when you install the HIMEM.SYS device driver. Most messages indicate a problem that needs correction before HIMEM.SYS can be installed properly. The messages and their meanings are as follows: 1. "64K High Memory Area is available" means you have installed HIMEM.SYS properly. 2. "ERROR: HIMEM.SYS requires DOS Version 3.00 or higher. XMS Driver not installed" means you have tried to install HIMEM.SYS on a machine using a version of MS-DOS earlier than Version 3.00. You can only install HIMEM.SYS on systems using MS-DOS Version 3.00 or later. 3. "ERROR: HIMEM.SYS requires an 80x86-based machine. XMS Driver not installed" means you have tried to install HIMEM.SYS on a machine other than an 80286 or 80386. HIMEM.SYS can only be installed on a computer system that has an 80286 or 80386 microprocessor. 4. "ERROR: An Extended Memory Manager is already installed. XMS Driver not installed" means you have tried to install HIMEM.SYS after it has already been installed on your system. HIMEM.SYS can only be installed once. 5. "ERROR: No available extended memory was found" means you have tried to install HIMEM.SYS on a computer without any extended memory. HIMEM.SYS can only be installed on a computer with extended memory. 6. "ERROR: Unrecognized A20 hardware" means HIMEM.SYS cannot recognize the A20 hardware of your system. If this occurs, it is probably because the system is not one supported by this release of HIMEM.SYS. Contact your computer manufacturer or dealer to see if an XMS driver exists for your machine. 7. "WARNING: The High Memory Area is unavailable" means HIMEM.SYS cannot find enough memory to use the High Memory Area. HIMEM.SYS cannot process any requests for the High Memory Area. However, HIMEM.SYS remains installed to process any requests for the Extended Memory Data Blocks. 8. "WARNING: The A20 Line was already enabled" means that during the installation process, HIMEM.SYS detected the A20 hardware was already enabled. HIMEM.SYS remains installed and attempts to work properly, however it does not disable the A20 line. VERSIONS COMPATIBLITY WITH WINDOWS/286 HIMEM.SYS, the Microsoft implementation of an XMS (extended memory specification) device driver, is shipped with MS-DOS Version 4.00 and with Windows Version 2.10. Different versions of HIMEM.SYS are available with different releases of the product, so some version matching must be observed. This article will describe version compatibility for the released versions of HIMEM and Windows. The following table shows the file sizes (in bytes) of the released versions of HIMEM.SYS. Other than noting the version message when HIMEM is loaded from the CONFIG.SYS, the easiest way to determine which XMS driver version you have is to look at the size of the file. (Incidentally, noting the version of HIMEM.SYS will help determine the release of Windows Version 2.10 that you have, which is useful in the discussion below.) Filename Version Size (in Bytes) HIMEM.SYS 1.00 1613 HIMEM.SYS 1.10 1610 HIMEM.SYS 2.00 4571 HIMEM.SYS 2.01 4777 HIMEM.SYS 2.02 4775 HIMEM.SYS 2.03 5792 HIMEM.SYS 2.04 6223 HIMEM.SYS 2.06 6266 HIMEM.SYS Version 1.00 was shipped with the first release of Microsoft Windows Version 2.10 having files dated 5-27-88. This release of Windows and this version of HIMEM.SYS are version locked. This release of HIMEM.SYS is the only release that will work with this version of Windows; conversely, this version of Windows will work only with this version of HIMEM.SYS, not with any other version of HIMEM.SYS (or with any other XMS driver). This version of HIMEM.SYS is not a full XMS device driver; it is only a high-memory manager and can be used only by this version of Windows. HIMEM.SYS Version 1.10 was shipped with later releases of Microsoft Windows Version 2.10 having files dated 7-1-88. This release of Windows can use this version of HIMEM.SYS or later versions. In addition, this release of Windows can use other XMS drivers in place of HIMEM.SYS Version 1.10. However, HIMEM.SYS Version 1.00 (the earlier HIMEM.SYS release) CANNOT be used with this release of Windows. Version 1.10 of HIMEM.SYS is not a full XMS device driver; it is only a high-memory manager. However, Version 2.10 of Windows uses the XMS interface for accessing the high-memory area, allowing later versions of HIMEM.SYS to be used in place of Version 1.10. HIMEM.SYS Versions 2.00, 2.01, 2.02, 2.03 and 2.05 have not been released to the public; therefore, they will not be discussed in this article. HIMEM.SYS Version 2.04 is a fuller implementation of the XMS definition than HIMEM.SYS Versions 1.x. The releases of Versions 2.00 through 2.04 allow access to extended memory, whereas the releases of Versions 1.x only allow access to the high-memory area. HIMEM.SYS Version 2.04 is shipped with later releases of Windows Version 2.10 having files dated 9- 7-88. HIMEM.SYS Version 2.06 has the same functionality of version 2.06. There were minor fixes from version 2.04. This version is available on Compuserve, in the Microsoft Systems forum, (GO MSSYS). The driver is in the DOS utilities library. The file is HIMEM.ARC. In summary, if you have the first release of Windows Version 2.10 having files dated 5-27-88 which include HIMEM.SYS Version 1.00, you can use only this version of HIMEM.SYS unless you upgrade to a later version of Windows. If you have a later version of Windows, you can choose to upgrade to the latest version of HIMEM.SYS. "Memory Configuration Altered..." The following is a Microsoft Knowledgebase article: Title: Windows/286 Err Msg: Memory Configuration Altered Document Number: Q46950 Publ Date: 20-JUL-1989 Product Name: Microsoft Windows/286 Retail Product Product Version: 2.10 2.11 Operating System: MS-DOS Summary: The following article discusses the causes for the error message "Memory configuration altered" when starting Windows/286. More Information: In all cases under Windows/286, this error cannot occur unless you have installed Windows/286 to "use extended memory," which causes Windows/286 to expect the HIMEM.SYS driver to be present. The following are causes for this message: 1. HIMEM.SYS is not in the CONFIG.SYS file, or is in the CONFIG.SYS file but not present in the specified location. Examine your CONFIG.SYS file to verify that the line DEVICE=HIMEM.SYS is present, and a copy of HIMEM.SYS is in the root directory of your boot drive (or place a path specification in the DEVICE= line). 2. HIMEM.SYS is in the CONFIG.SYS, but is not installing (gives an error during the boot process) because of one of the following reasons: a. You do not have at least 64K of extended memory. You can correct this problem by creating 64K of extended memory to reconfigure your system (e.g. configure part of your expanded memory board as extended). If you cannot create 64K of extended memory, you need to reinstall Windows/286 and specify that you do not have extended memory available. Also, remove the line DEVICE=HIMEM.SYS from your CONFIG.SYS. b. You receive the error "Unrecognized A20 hardware." This error message means that your computer implements extended memory in a nonstandard way, and HIMEM.SYS cannot work on your machine. Reinstall Windows/286 and specify that you do not have extended memory available. Also, remove the line DEVICE=HIMEM.SYS from your CONFIG.SYS. To correct this problem in the long term, contact your hardware manufacturer; a BIOS upgrade may provide a solution. c. You receive the error "A20 line already enabled." This error message means that some other driver is using extended memory before HIMEM.SYS is loaded. Verify that the line DEVICE=HIMEM.SYS is the first line in the CONFIG.SYS file, and that you are not loading any other protected-mode software (such as 386 memory managers) that are incompatible with HIMEM.SYS (for more information, search on the following words HIMEM.SYS and memory and managers.) For testing purposes, remove everything from the CONFIG.SYS except HIMEM.SYS (and the disk-partitioning driver, if present). 3. HIMEM.SYS is in the CONFIG.SYS file and is installing without an error, but you still receive the "Memory configuration altered" message. This means that some other program or driver is interfering with HIMEM.SYS after it is loaded. Verify that no other programs or drivers that use extended memory are in the CONFIG.SYS or AUTOEXEC.BAT files. Typical offenders are 386 memory managers (for more information, search on the following words: memory and managers), disk-caching programs other than SMARTDrive, and RAMdisk programs other than RAMDrive. Remove all drivers from the CONFIG.SYS file (except the disk- partitioning driver, if present) and all programs from the AUTOEXEC.BAT for testing purposes. COPYRIGHT Microsoft Corporation, 1989. DOS Applications Under Windows/286 and Windows/386 How Windows/386 handles DOS applications Windows/386 can multitask as many DOS applications as it can fit into memory (including Extended memory). DOS applications must be resident in memory. Windows/386 does not swap applications to disk. Windows/386 will load DOS programs into memory, and once you run out of memory, you will not be able to load any more DOS apps. It takes a lot of memory to run DOS applications under Windows/386. First of all, Windows/386 reserves the first megabyte for running Windows applications. This is referred to as the first Virtual Machine, or VM1. What is a Virtual Machine? A Virtual Machine is just a 640K (or smaller) memory space that you can run a program in. Well, you might ask how this is different from your current system. You currently have 640K memory, and you can run MS Word, or an application such as that in your computer, and go from there. What is it about Windows/386 that makes a 640K program area into a "Virtual Machine"? Well, using the special abilities of the 80386 processor, Windows/386 can create more than one Virtual Machine, and run a program in each of them at the same time. It divides the total of your conventional memory and extended memory into independant Virtual Machines. This is how it works: First, You must have at least two megabytes of memory. When Windows/386 starts, it creates a Virtual Machine for running Windows applications. The size of this VM is defined by the windowmemsize setting, located in the [win386] section of the WIN.INI (see WIN.INI section). It is recommended that this setting be 640. Now, you decide to run a DOS application. Windows/386 creates another Virtual Machine. This memory area is located in your extended memory area above 1 megabyte. Say from 1 meg to 2 megs. Unless you use a PIF file (explained later), Windows/386 allocates 640K for the Virtual Machine. Plus, a certain amount of overhead is allocated for the display and for memory management information. That means approximately 384K of overhead in a typical configuration using an EGA card. This overhead is necessary to multitask DOS applications because each application needs to write to it's own display memory. Once the Virtual Machine is created, the DOS application is loaded. At this point Windows/386 has two DOS memory areas created at the same time. Using special capabilities of the 80386 processor, Windows/386 fools the DOS application running in the 1 meg to 2 meg address space into believing it is running in it's own zero to 640K memory space. How is the multitasking achieved? Again, using the Virtual Machine technology, the processor can be running one Virtual Machine in 8086 mode, completely stop, save its complete state of being (registers and location), and resume another Virtual Machine. It's like Windows/386 has split your 2 meg 386 computer into two completely separate 1 meg 8086 computers running at the same time! Memory that is not being used for Virtual Machines is dynamically converted to Expanded memory. This Expanded memory is available to all the Virtual Machines. How Windows/286 handles DOS applications Windows/286 has a limited ability to run DOS applications when compared with Windows/386. Since Windows originally ran on non-80286 machines, the DOS support was based on 640K machines. Windows/286 does not use Extended memory for DOS applications to create Virtual machines. Instead, it runs all DOS applications in the normal 640K address space where Windows normally runs. Windows/286 will handle a DOS application one of three ways depending on the settings in its PIF file. The three different scenarios are: Level 1: The Directly Modifies Screen checkbox is not checked. These are applications that write to the screen using BIOS or ANSI commands. They do not access system resources such as the COM port or video memory directly. Examples: CHKDSK, COMMAND.COM, COPY Level 2: The Directly Modifies Screen checkbox is checked. The application writes to the video memory directly. Examples, MS WORD, LOTUS 1-2-3, Ashton-Tates DBASE. Level 3: The Directly Modifies Memory checkbox is checked. The application needs all of DOS memory in the system and/or graphics card such as AutoCad. These applications must run alone. There is little advantage to running these applications from Windows, as you will have to close all Windows applications in order to run the DOS application. Windows provides a program, WINOLDAP.MOD which acts as an interface between Windows and all DOS applications running on the system. Winoldap is technically known as a "shell", and as such, provides cut and paste clipboard support between Windows and the DOS applications. It also has built into it sophisticated macro capabilties which can be used by system software developers to manipulate DOS applications. It also provides necessary environmental support for DOS applications and interfaces with the Windows DOS application screen grabber. There are already some announced Windows-based programs which will provide access to this full functionality of Winoldap, most notably Hewlett-Packard's New Wave and Softbridge Microsystems Bridge 286/386. If the reader is interested in these programs, they should contact their local Hewlett Packard sales office or Softbridge Microsystems at (617) 576-2257. Windoldap will function differently depending on which level of DOS application you are using: Level 1: If there is enough memory available in the system for mapping the screen buffer into a window and supply the applications memory requirements, Windows can run the application within a window. As is always the case, the PIF settings are used to determine whether this is possible. This mode of operation will leave little memory available for running any other applications. Level 2: In this case Winoldap swaps Windows and Windows applications running in conventional memory out to the swapdisk set in the [pif] section of the WIN.INI. If swapdisk=/e then Windows will attempt to swap to expanded memory if it is available and there is enough of it. This allows the user to context swith between Windows and DOS applications using ALT-TAB or ALT-ESC depending on how the DOS application writes to the video display. Level 3: In this case, Winoldap checks to see if any applications are running. If there are, it responds "Cannot run with other applications". If there are no applications running, Windows saves its state in a small chunk of memory and then closes down. The DOS application is launched and must be quit in order to get back to Windows. When the DOS application closes, Windows is restarted. Considerations for Running DOS Applications under Windows/286: 1. The amount of swap space needed to run Level 2 and 3 DOS applications is much larger than first appears. Windows requires that there be at least twice the amount of memory (as specified in the PIF Memory Required entry) plus enough memory to store the screen buffer of the application and Windows. This space must be available on the hard disk or in the EMS memory pool before Winoldap can run the DOS application. 2. If a Windows program is using the COM port, Windows will not be able to swap itself to disk in order to run a Level 2 or 3 application. This is because the COM port requires servicing that is impossible when the Windows application is swapped to disk. 3. Winoldap has no provision for restricting the amount of EMS used by a single DOS application. This can cause difficulties when running an application such as Lotus 1-2-3 that may allocate all available EMS. This will manifest itself as a lack of EMS when context switching back and into Windows or being unable to run any other Windows applications in large frame EMS mode. It can also cause problems when use with "swapdisk=/e" since there may not be enough EMS in which to bank the DOS application. In this case the performance will be considerably slowed because Winoldap will have to swap to the hard disk instead of faster memory. 4. If graphics cut and paste support is not required for a DOS application, the Screen Exchange option may be changed to those using less memory (from "Graphics/Text" to "Text" using the PIF editor since this may conserve an extensive amount of memory which would otherwise be unused. This option may be disabled if no clipboard support is required at all. 5. If you are not running the DOS application in a window, it may be desirable to set the Memory Desired setting in the PIF file to -1. This will cause Windows to swap out, thus freeing up additional memory for other uses. 6. While swapdisk=/e supports large and small frame EMS, it will function faster in large frame mode because it is able to bank switch the entire DOS application into EMS instead of having to squeeze the DOS application through the 64K LIM 3.2 page frame. 7. EGA.SYS will help preserve the mode of the EGA video card when running DOS applications such as Microsoft Word under Windows. It allows custom EGA palettes to be saved and saves the state of the the text mode (43 line vs 25 line mode) of a DOS application while switching between the DOS application and Windows. 8. If you experience ANY problems running DOS applications with any third party graphics card, verify that the latest version of BIOS and manufacturer supplied driver is used. Also, be certian that the auto-emulation(switching) feature of the graphics card is disabled. Typical symptoms of this problem are blank screens on boot, or "holes" in the display and sometimes machine lockups when switching between Windows and DOS applications. These lockups may also be caused when there is an interrupt conflict in the system, typically involving a bus mouse card. Smartdrive SMARTDrive is a disk caching utility included with Windows and MS-DOS. It stores disk blocks that have been involved in read or writes in a memory buffer. If the block is called on again, SMARTDrive provides it from memory as opposed to accessing the relatively slower hard drive. The cache size for SMARTDRV.SYS is in kilobytes. The minimum value is 128 (128K), and the maximum value is 8192 (8 megabytes). If this size is not explicitly specified on the SMARTDrive command line, the default value is 256 (256K). The upper limit of the SMARTDrive cache is not specified in the "Microsoft MS-DOS 4.00 User's Reference" manual. SMARTDrive supports the use of extended memory and expanded memory, but not conventional memory. SMARTDRV.SYS was designed as a disk caching program for environments with memory that MS-DOS does not use heavily: extended and expanded memory. The maximum 640K of conventional memory is so valuable these days that most people don't waste it with disk caching. Most people would rather use this precious conventional memory for running programs, and not for SMARTDrive to speed up their systems. For people who do not feel this way, there are two upgrade paths available. They are as follows: 1. Obtain an Expanded memory board This works with Windows/286 and Windows/386, also. If used for Windows/386 and Smartdrive, it must be configured as Extended (so a cheaper Extended memory board will suffice). 2. Obtain an Extended memory board. Usually cost less than an Expanded memory board and provides the same support for Windows applications if you are using Windows/386. Windows/286 cannot use Extended memory, however. SMARTDrive caches only nonremovable hard drives that operate on the IBM ROM INT 13H interface using drive numbers starting at 80H. SMARTDrive will not cache network drives, RAM drives, or removable drives of any kind, including floppy drives and removable hard drives such as the Iomega Bernoulli Box. These drive types do not utilize INT 13H. Since SMARTDrive is operating at the INT 13H level of the system, all logical partitioning schemes that operate above the INT 13H interface will not be cached. SMARTDrive caches all hard-disk activity (up to 16 physical drives) that is processed by the INT 13H interface. Note: The number of physical hard drives is the number returned in the DL register on an AH=08 INT 13H call. SMARTDrive caches logical drives if the physical drive uses INT 13H. SMARTDrive frequently does not work correctly on hard disks with third-party partitioning software such as Disk Manager and Priam hard disk partitioning utilities. General guidelines on how much memory to allocate to SmartDrive are very hard to give; it is very subjective. There is no "Optimum Setting" that is guaranteed to work better than any other. If you are using expanded memory with a LIM Version 4.0 driver, we generally recommend you use about one third of your EMS memory for SmartDrive. If a lot of disk swapping is expected to occur, then use more. However, having a very large SmartDrive will decrease the amount of expanded memory available for Windows to load Code segments into, so more swapping will occur and fewer programs can be loaded. If the extra memory in your computer is extended memory and you are not using Windows/386, it is usually best to assign it all to SmartDrive, since Windows/286 does not use extended memory. If you are using Windows/386, try assigning to SmartDrive one third of the memory you have available beyond the 1 megabyte of system memory. Note that SmartDrive (for expanded memory) has an IOCTL that allows Windows/286 to take expanded memory away from SmartDrive. The upshot is that you can give SmartDrive memory and not totally starve Windows/286 since it will take the memory back when it needs it. We recommend experimentation if you are not satisfied with the performance. The system performance improvement from SMARTDrive is not linear (linear in this context means that as you increase the memory allocated to SMARTDrive, each memory increase returns a relative performance improvement). This section discusses factors involved in the performance increase you will realize from using SMARTDrive in various configurations. Windows/286 with LIM Version 4.0 Expanded Memory In Windows/286 with SMARTDrive in LIM Version 4.0 expanded memory, Windows can borrow expanded memory from SMARTDrive when it requires more memory to run Windows applications. This is implemented by placing the /A switch on the Smartdrive Config.sys entry. In this configuration there is no penalty for loading SMARTDrive with a very large amount of memory allocated (512K to 2 megabytes). Note that Windows may not borrow memory from SMARTDrive to swap DOS applications with swapdisk=/E, but only to run Windows applications. In the 5/27/88 release of Windows/286 Version 2.10, SmartDrive did not properly regain expanded memory that it gave up to Windows applications after those applications were closed. Microsoft has confirmed this to be a problem in the 5/27/88 release of Windows/286 Version 2.10. The problem was corrected in releases of Windows/286 dated 7/1/88 or later. Windows/286 with Extended Memory Since Windows/286 cannot use more than 64K of extended memory (with the HIMEM.SYS driver), in this type of configuration SMARTDrive should be installed for all available extended memory minus 64K. Windows/386 (Extended Memory) Since Windows may not borrow memory from SMARTDrive when SMARTDrive is running in extended memory, all memory allocated to SMARTDrive reduces the amount of memory available to run DOS applications. When running in extended memory, allocating beyond 512K to SMARTDrive causes the incremental benefit to fall off quickly and at some point actually diminishes (due to cache management overhead). This means that a 1-megabyte SMARTDrive has better performance than a 512K SMARTDrive, but not twice the performance. Clearly all of this is environment specific, but 512 is a reasonable rule of thumb for a maximum size to allocate. Environment specifics that affect SMARTDrive performance are as follows: 1. The average seek time of disk (the faster the disk, the smaller the benefit from SMARTDrive) 2. The interleave factor of the disk 3. Fragmentation of files on the disk (it is HIGHLY recommended for optimum SMARTDrive performance to optimize the hard disk frequently with an appropriate utility) 4. System processor speed (the faster the clock speed, the lower the SMARTDrive overhead) 5. Memory speed (same as processor speed) 6. The applications that are being run, and the way they access the hard disk (i.e., whether they use sequential or random access to disk files) 7. The number and size of applications being run The following is a list of features and corrections of the September 7, 1988 release of SMARTDrive and RAMDrive (Windows/286 Version 2.10D): 1. They now support the IBM PS/2 30-286. 2. The Compaq 386S is now supported. 3. DOS Version 4.00 is fully supported. 4. Both RAMDrive and SMARTDrive can now use expanded and extended memory (expanded memory requires the /a option). 5. Both are now able to run on machines that operate at faster speeds. Memset Memset is the program in Version 2.10 and 2.11 of Windows/286, Windows/386, and Excel that installs both SMARTDrive (SMARTDRV.SYS) and RAMDrive (RAMDRIVE.SYS). It calculates the amount of your total memory for each device by reading the amount of extended memory on your system. It also installs any expanded-memory drivers that are needed for the hardware it detects. Everything Memset installs can be done manually. It adds the needed "device=" lines to the CONFIG.SYS file and copies the necessary files from the original disks. Memset can be run at any time after installing Windows or Excel. The following information outlines how SETUP and MEMSET choose the optimal SMARTDRV.SYS Settings: 1. For Win/286, list in order of test: Case1: ((free extended-64K) >= 128)) smartdrv.sys= ALL remaining free extended Case2: (free expanded > 512 and <= 1024) smartdrv.sys = 256K Case3: (free expanded > 1024K smartdrv.sys = 512K 2. For Win/386: Case1: (free extended > 1024K) smartdrv.sys = (free extended - 1024K / 4) OR 128 (whichever is greater) Ramdrive RAMDRIVE.SYS is a device driver you can install that allows you to use a portion of your computer's memory as if it were a hard disk. Ramdrive emulates a virtual disk drive in either expanded or extended memory. The following is a copy from RAMDRIVE.TXT which is located on the Utilities 2 and Fonts disk (5 1/4"). ========================================================= USING RAMDRIVE WITH WINDOWS ========================================================= First, follow the installation instructions provided by your extended memory board manufacturer. Next, copy the file, RAMDRIVE.SYS, from the Utilities 2 Disk to your fixed disk. Then add the following command line to your CONFIG.SYS file: device=[drive:][path]RAMDRIVE.SYS [bbbb] [ssss] [dddd] [/E or /U] Note that either /E or /U may be specified, but not both. If you do not specify one of these two, then RAMDrive will use system memory for RAMDrives. It is almost always a bad idea to use conventional memory for a RAMdrive as it will significantly reduce the performance of Windows. Running RAMdrive in extended (/E) memory, or on an AT&T 6300 Plus (/U) is much preferred. Following is an explanation of the parameters: *NOTE: Information in a RAMDrive is lost when you re-boot or restart your computer. [bbbb] The first numeric argument, if present, is the amount of memory in kilobytes to be used as your RAMDrive. If no numeric arguments are specified, then the default value is 64K. The minimum amount of memory needed is 16K; the maximum amount of memory possible is 4096K. [ssss] The second numeric argument, if present, is the sector size in bytes. If a second numeric argument is not specified, the default is 512 bytes. The four possible values are 128, 256, 512, and 1024 bytes. NOTE: With IBM PC-DOS or Olivetti DOS the maximum value allowed is 512 bytes. With MS-DOS 1024 bytes is the maximum value. Values are rounded up to the nearest sector size boundary. [dddd] The third numeric argument, if present, is the number of root directory entries. If no third numeric argument is specified, then the default is 64. The minimum number of entries needed is 2; the maximum number allowed is 1024. *NOTE: If there is too little memory to create the number of root directory entries specified, then RAMDrive attempts to create a RAMDrive with fewer root directory entries. /E Specifies that extended memory is to be used for the RAMDrive. /U Specifies that some or all of the 384K of upper extended memory on the AT&T 6300 PLUS motherboard is to be used as an extra RAMDrive. You may only specify this parameter with an AT&T 6300 PLUS. *NOTE: There is 1K of RAMDrive overhead. Only 383K is available for RAMDrives. This overhead is constant; it does not depend on the number of RAMDrives installed. ========================================================== ERROR MESSAGES ========================================================== Message: RAMDrive: Computer must be PC-AT, or PC-AT compatible Explanation: There is no extended memory available on your PC-AT or compatible for RAMDrives. Result: RAMDRIVE.SYS was not installed. Solution: Remove the /E parameter. Try installing RAMDrive in system memory. --------------------------------------------------------- Message: RAMDrive: No extended memory available Explanation: Your computer has no memory available for RAMDrives. Result: RAMDRIVE.SYS was not installed. Solution: Free some extended memory or obtain more memory. --------------------------------------------------------- Message: RAMDrive: Insufficient memory Explanation: Your computer has some memory available, but not enough to set up a RAMDrive. Result: RAMDRIVE.SYS was not installed. Solution: Free some extended memory or obtain more memory. -------------------------------------------------------- Message: RAMDrive: Invalid parameter Explanation: The parameters you specified in your CONFIG.SYS entry for RAMDRIVE.SYS are not correct. Result: RAMDRIVE.SYS was not installed. Solution: Check to see if you specified too many parameters, if one of your numeric parameters is not valid, if you specified conflicting switches ( i.e. only one of /E or /U may be specified ), or if you specified too many switches. Change the RAMDRIVE.SYS command line in your CONFIG.SYS file to conform to the usage described above. ---------------------------------------------------------- Message: RAMDrive: Incorrect DOS version Explanation: RAMDrive requires DOS 2.X or DOS 3.X. Windows 2.1 requires DOS 3.0 or higher. Result: RAMDRIVE.SYS was not installed. Solution: Upgrade to DOS 3.0 or higher. --------------------------------------------------------- Message: RAMDrive: I/O error accessing drive memory Explanation: During the set up of the RAMDrive, an error was detected in the memory being accessed for RAMDrive. Result: RAMDRIVE.SYS was not installed. Solution: Run the memory test for the memory on which you were attempting to install a RAMDrive. ====================================================== OTHER MESSAGES ====================================================== Message: Microsoft RAMDrive version Y.YY virtual disk [drive:] Explanation: RAMDrive Header message. Y.YY is the version of RAMDrive; [drive:] is the DOS drive letter assigned to this RAMDrive. NOTE: On DOS 2.X the "virtual disk d:" part of this message will not be printed. -------------------------------------------------------- Message: Disk size: x k Sector size: x bytes Allocation unit: x sectors Directory entries: x Explanation: This message tells how many kilobytes of memory were assigned to the RAMDrive, how many bytes there are in a sector, how many sectors there are in an allocation unit, and how many root directory entries there are (including the volume label). ====================================================== END OF RAMDRIVE.TXT ====================================================== Other observations: Here are articles from the Microsoft Knowledgebase: Title: RAMDRIVE.SYS Problems Loading in Conventional Memory Document Number: Q35758 Product Name: Microsoft Disk Operating System Product Version: 4.00 Operating System: MS-DOS Summary: If either the /A or /E switch is not specified when running RAMDRIVE.SYS (i.e., there is no extended or expanded memory available) RAMDrive will use conventional memory to emulate a virtual disk drive. There is a problem on some 80286 and 80386 systems that will prevent RAMDrive from loading in conventional memory. Most people don't use RAMDrive in conventional memory, since this area of memory is so scarce. This article describes this problem, and how RAMDrive has been changed to eliminate this problem. More Information: When RAMDrive is specified to load in conventional memory, it tries to use additional (normally unused) memory outside the 640K area, if available, to reduce the amount of conventional memory used. RAMDrive makes a call to ROM BIOS interrupt 12h, Memory Size Determination. This interrupt returns the amount of conventional memory in kilobytes that the system has. RAMDrive looks for additional memory by starting at the location pointed to by ROM BIOS interrupt 12h, moving up to the address A000h, where the video adapter memory begins. It tests this by writing to the first two words, then reading the contents of these words. If the write worked successfully, RAMDrive assumes that the entire 1K of memory is usable. Since the minimum size of a RAMDrive is 16K, RAMDrive looks for 16 of these 1K areas. If it cannot find them, it exits, giving an insufficient memory error. If RAMDrive finds 16K of usable memory between the top of memory (the area pointed to by ROM BIOS interrupt 12h) and address A000h, the RAMDrive is loaded at this point, thus saving conventional memory. However, this causes problems on some systems. Unlike the conventional IBM PC/XT/AT ROM BIOS releases, which most PC systems are based on, some ROM BIOS manufacturers have random-access memory in this area, but use it as an internal ROM BIOS data area. When RAMDrive is loaded in conventional memory on these systems, the memory test of RAMDrive destroys the contents of RAM in this area, in which case a cold reset of the system is recommended. Another area in which this causes problems is with the IBM (and compatible) PS/2 series of computers. These systems trap ROM BIOS interrupt 12h, returning a value of 1K less. This 1K of memory is used as the Extended BIOS Data Area, which is accessible on these systems by calling ROM BIOS interrupt 15H AH=C1h, Return Extended BIOS Data Area Segment Address. Normally, these PS/2 systems don't have any extra memory between the "top of conventional memory" and address A000h. So, when RAMDrive is asked to be installed in conventional memory, it looks for 16K of memory in this area, and when it can't find it, RAMDrive exits with an insufficient memory error. Microsoft has confirmed this to be a problem in Version 2.10 of RAMDRIVE.SYS. This problem was corrected in Version 2.12 of RAMDRIVE.SYS, which is included with MS- DOS Version 4.00. Since the PS/2 systems, in addition to some other systems (with a nonconventional ROM BIOS), use memory above the "top of conventional memory," Version 2.12 of RAMDrive no longer attempts to use memory in this area. This problem is not commonly encountered because most people don't attempt to use precious conventional memory to store a RAMDrive. Therefore, the workaround for this problem is not to use RAMDRIVE.SYS in conventional memory on systems that have a ROM BIOS of this type. For more information on PS/2 ROM BIOS information, refer to the reference "IBM PS/2 and PC BIOS Interface Technical Reference," part number 68X2260, available from IBM by calling (800) IBM-PCTB. Another reference that contains similar material is the Microsoft Press book, "Programmer's Quick Reference Series: IBM ROM BIOS," by Ray Duncan, ISBN 1-55615-135-7. COPYRIGHT Microsoft Corporation, 1989. -------------------------------------------------------- Title: SMARTDrive and RAMDrive Version Conflicts with MS- DOS 4.01 Document Number: Q38636 Publ Date: 21-APR-1989 Product Name: Microsoft Windows/286 Retail Product Product Version: 2.10 2.11 Operating System: MS-DOS Summary: The following information applies to Windows/286 and Windows/386 Version 2.10 with files dated 9/7/88. The SMARTDRV.SYS and RAMDRIVE.SYS supplied with this release of Windows Version 2.10 will not function with MS- DOS Version 4.01. This malfunction occurs because SMARTDrive's and RAMDrive's version checking will not accept the 4.01 DOS version number. To correct this problem, use the SMARTDRV.SYS and RAMDRIVE.SYS supplied with MS-DOS Version 4.01. These programs provide identical functionality without the version-checking conflict. COPYRIGHT Microsoft Corporation, 1989. ---------------------------------------------- Title: Using Windows/286 on the IBM PS/2 Model 30286 Document Number: Q37183 Publ Date: 11-APR-1989 Product Name: Microsoft Windows/286 Retail Product Product Version: 2.10 2.11 Operating System: MS-DOS Summary: To run Windows/286 on the IBM PS/2 Model 30286, you must have Windows/286 Version 2.10 or later, dated 9/7/88 or later. In particular, the Windows utilities RAMDrive, SMARTDrive, and HIMEM.SYS do not function correctly on the Model 30286 unless you have the latest revision of Windows/286 Version 2.10 or later. Early releases of Windows/286 Version 2.10 were not tested on the Model 30286 because the machine was introduced at a later date. If you have an IBM PS/2 Model 30286 and a release of Windows dated prior to 9/7/88, please contact Microsoft Customer Service at (206) 882-8088 for assistance in obtaining an update to Windows/286 Version 2.11. COPYRIGHT Microsoft Corporation, 1989. ------------------------------------------------ Balancing Everything HIMEM.SYS: Use if you have extended memory and Windows/286. The only disadvantage would be if you end up losing a great deal of Expanded memory in the process. Some memory boards, (such as the Intel Above Board Plus) allow you to configure the board as part Extended and part Expanded. Some have a limited selection of configurations. You may have to configure your board with a minimum 512K Extended if you want any Extended memory at all. This leaves 448K of Extended going unused and not directly usable by Windows/286. If you want to use Smartdrive, you can allow it to allocate this memory. If you desire more than 448K for Smartdrive in this case, configure your Extended memory board for more Extended memory. Since Smartdrive can install itself in Expanded memory (with Windows/286), you will have to decide whether you want the benefits of Himem.sys (requiring part of your board to be Extended) or to not use Himem.sys (allowing all of your memory to be configured as Expanded). SMARTDRIVE vs RAMDRIVE: However, if you typically access a small number of files (such as one major program and maybe one or two data files) Ramdrive is probably for you. What you can do is place statements in your AUTOEXEC.BAT file to copy these files to the Ramdrive. This allows these files to be read from an written to very quickly. Note: you will eventually have to copy the files to your hard drive before you turn off the computer or you will completely lose all changes to those files (a reason to avoid copying data files to Ramdrive, unless you are carefull!). Smartdrive, on the other hand, caches all disk files, and will speed up your disk access in general. Therefore, it will provide better overall performance than Ramdrive and is recommended in most cases over Ramdrive. End of Document