High Memory Area
|
The High Memory Area (HMA) is the RAM area consisting of the first 64 kilobytes (KB), 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 KB minus 16 bytes of memory (from 0000:0000
to FFFF:FFFF
, 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 megabyte 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 KB 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.
See also
- Unreal mode
- Conventional memory
- Upper Memory Area
- Extended memory
- Extended Memory Specification
- Expanded Memory Specification
- This article was originally based on material from the Free On-line Dictionary of Computing, which is licensed under the GFDL.