High Memory Area

From Wikipedia, the free encyclopedia

The High Memory Area (HMA) is the RAM area consisting of the first 64 kibibytes (KiB), minus 16 bytes, of the extended memory on an IBM PC or compatible microcomputer.

By a strange design glitch the Intel 80286 and subsequent processors can actually address 17×64 KiB minus 16 bytes of memory (from 0000:0000 to FFFF:FFFF (equivalent to the memory address FFFF0 + FFFF = 10FFEF), written in PC memory segment notation with hexadecimal numbers) in real mode. In the Intel 8086 and Intel 8088 processors, unable to handle more than 1 mebibyte of memory, addressing wrapped around, that is, address FFFF:0010 was equivalent to 0000:0000.

In order to allow running existing MS-DOS programs which relied on this feature on their newer IBM PC AT computers, IBM added special circuitry on the motherboard to simulate the wrapping around. This circuit was a simple logic gate which could disconnect the microprocessor's addressing line A20 from the rest of the motherboard. This gate could be controlled, initially through the keyboard controller, to allow running programs which wanted to access the entire RAM.

So-called A20 handlers could control the addressing mode dynamically, thereby allowing programs to load themselves into the 1024–1088 KiB region and run in real mode. The first user of the HMA among Microsoft products was Windows/286 2.1 in 1988, which introduced the HIMEM.SYS device driver. Starting with versions 5.0 of DR-DOS (1990) and of MS-DOS (1991), parts of the operating system could be loaded into HMA as well, freeing up to 46 KB of conventional memory. Other components, such as device drivers and TSRs, could be loaded into the Upper Memory Area.

[edit] See also


This article was originally based on material from the Free On-line Dictionary of Computing, which is licensed under the GFDL.