ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º º º DOS 5.0 and the High Memory Area º º º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ DOS 5.0 AND THE HIGH MEMORY AREA DOS 5.0 is the first DOS version to make use of the High Memory Area (HMA), loading a significant portion of the DOS system files into this memory. As a result, a 286 or later PC can show as much as a 46k gain in free conventional memory after upgrading to DOS 5.0, simply because much of resident DOS is now using HMA instead of conventional memory. History, Background Because DOS is essentially a REAL mode operating system, it limits users to accessing only the address range below 1024k. Even on systems with 286 or later processors that can access megabytes of memory, the 640K limit still exists in the DOS world. There is, however, one small portion of EXTENDED memory (the memory above 1024k) that 286 or later processors can access - even with the processor in REAL mode. This is the 64k of memory from 1024-1068k. To understand how this memory is accessed, it is necessary to look at PC memory addressing in general. The PC in REAL mode addresses memory through a combination of a SEGMENT and an OFFSET. You could think of this as giving a location by saying it was a certain number of yards away (the segment) plus a certain number of feet (the offset). Therefore, something that is at a segment of 7 yards and an offset of 2 feet would have an absolute distance (or address) of 23 feet. Of course you coud express the same location as a segment of 6 yards and an offset of 5 feet. In REAL mode operation, any memory that can be addressed can be described in a similar fashion. The memory is located in a particular SEGMENT, at a particular OFFSET from that segment. On 8086/8088-based computers, there is a maximum to the absolute address of FFFFF. This could be expressed as a location of SEGMENT F000 plus OFFSET FFFF (F000:FFFF), or as a location of SEGMENT FFFF with an OFFSET of 000F (FFFF:000F). The question became, if you could have a SEGMENT address of FFFF with an OFFSET address of 000F, what happened when you added 1 to the OFFSET address, and it became 0010? This was acceptable register math, but it exceeded the maximum memory the CPU could address. The answer was, you "wrapped" back into the bottom of conventional memory. Consequently, this was a boundary condition that became known, and the PCs using the 8086 and 8088 processors were designed with this in mind. When the 80286 processor was introduced into the PC market, there was a new variable. It could address memory above one megabyte, that is above an absolute address of FFFFF. There was now the possibility that FFFF:0010 could describe a unique and valid memory location - something that couldn't happen on the 8086/8088. In order to insure backward compatibility, the AT and subsequent computers were designed to "uncouple" the addressing of the processor from the addressing on the motherboard. This meant that ATs could be expected to behave the same as PCs. If you exceeded FFFF:000F, you would "wrap" to the bottom of conventional memory. As memory below 1024k became more and more precious, it came to the attention of inventive folks in the PC industry that the 64k of memory from 1024 to 1068k was accessible to 286 or later CPUs in REAL mode - if only the CPU could be "re-coupled" to motherboard addressing. Of course, the "re-coupling" needed to be selective, so that any code relying on the "wrap" at the end of memory would still function. The address line responsible for allowing this access to take place is A20, and soon A20 handlers began to appear, such as QEXT.SYS and HIMEM.SYS. What these A20 handlers do is allow some programs to couple or de- couple the addressing between the motherboard and the CPU, thereby allowing that program access to the 64k of memory between 1024k and 1068k without the need to go into PROTECTED mode CPU operation. This 64k is referred to as the HMA, or High Memory Area - and to date it may be controlled by one client only. DOS 5.0 is the first DOS version to make use of the HMA for DOS itself, though DOS 4.01 shipped with an HMA manager - HIMEM.SYS. DOS 5.0 does much more than provide HIMEM, it uses HIMEM (or a HIMEM compatible XMS driver such as QEMM386 v5.12 or 386MAX v5.1) to manage the HMA and load a significant portion of the DOS system files into this memory. This is done by placing the DOS=HIGH command in the CONFIG.SYS file. As a result, a 286 or later PC can show as much as a 46k gain in free conventional memory after upgrading to DOS 5.0, simply because much of resident DOS is now using HMA instead of conventional memory. DOS=HIGH will also load BUFFERS into the HMA area. Because the means of coupling and de-coupling the CPU's addressing from the motherboard's addressing is system-specific, and was never standardized, the driver must accommodate the various methods that computer manufacturers have used. In order to do this, some drivers, such as HIMEM.SYS, require "switches" for particular machines. Be sure to check the documentation for your software to determine how to configure it for your particular machine. If you are uncertain, or if your computer behaves oddly when using the DOS=HIGH command, you should check with your computer manufacturer to find out the appropriate setup. The README file with DOS 5.0 lists many of the popular computers that require special switches for HIMEM.SYS. Requirements for HMA use: 286, i386, or i486 CPU-based PC XMS (Extended Memory Specification) driver - HIMEM, QEMM386, 386MAX, etc. At least 64k of extended memory - addressed from 1024k to 1068k. ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ End of file Intel FaxBack # 1250 June 24,1992