On classic x86 machines the upper 384 KB of system memory contains video RAM and BIOS ROM Besides other things. Those areas overlay over conventional RAM, so that you can't use all upper memory, but only some areas.

Does this mean that on machines with 1 MB of RAM some parts of it (and hence the associated DRAM ICs) will never be used?

  • 1
    At least some PCs supported remapping the 384K to just above 1MB so it could be usable. Some also supported using some of this RAM for BIOS shadowing.
    – user722
    Commented Apr 2, 2018 at 20:20
  • 1
    Short version: you're assuming the memory was mapped continuously. That was not usually the case. Machines sold as having 1MB of RAM had that RAM mapped with an address gap between 640KB and 1MB, precisely to account for the needs BIOS and attached devices. Commented Apr 3, 2018 at 1:46
  • The original 8088/8086 based machines couldn't address anything above 1Mb having only 20 address lines. If they had 1Mb of RAM it had to shadow the BIOS.
    – JeremyP
    Commented Jun 15, 2018 at 9:03

2 Answers 2


Does this mean that on machines with 1 MiB of RAM some parts of it (and hence the associated DRAM ICs) will never be used?

No. For one, at this time Machines did not come with 1 MiB, but 640 KiB at max. Even when 1 MiBit chips where used, they where usually of the 256x4 kind, so 4 of them made up 512 KiB plus another 4 64x4 chips (256 KiBit) adding the remaining 128 KiB. For 8086/88/186 machines there was no reason in having more than 640KiB (*1).

With upcoming 80286 machines usage for more than 640 KiB became possible. Early AT still had only 640 KiB Base Memory and everything above 1 MiB was to be added with add on cards. It wasn't until Chips and Technologies came up with their NEAT chipset. NEAT being an Acronym for 'New Enhanced AT'. Beside continuing the further integration of prior discrete components like Bus Controllers, Timers or DMA, the NEAT chipset also added logic to support 1 MiB of RAM (or more) with a mapping of 640 KiB at 0..9FFFFh (classic PC address Range) and what's left starting at 100000h (above 1 MiB) into the ATs extended address space.

Timewise this happened ~1986.

Successive chipsets added more features. For example shadowing of BIOS ROMs (*2) and LIM-EMS support with the LEAP chipset. Of course other companies also started to build integrated chipsets. Ultimately this was the start (*3) of today's well known Northbridge design of modern PCs.

*1 - At least not while being compatible. Non or less compatible machines, like the SIEMENS PC-D did offer a continuous MiB or RAM.

*2 - Already at this time ROM and even more EPROM chips where much slower than RAM. Every BIOS access did slow the machine down. With shadowing the BIOS content got copied into RAM, with write protection acting as fast ROM emulation.

*3 - The SuperXT chipset for 8086 machines was released after the NEAT one, despite what the lower chip-id suggests.

  • I confirm. Have PC XT motherboard on the table, with 640K physical RAM on it.
    – Anonymous
    Commented Apr 2, 2018 at 21:03
  • Ok, I have a 286 mainboard here with 1024 KiB of RAM, Phoenix BIOS 3.0. It has CHIPS ICs on board, but it is a pretty obscure board, so I am unsure whether it has any of your mentioned features... I just got it to boot and complain about CMOS settings. Will prep it up more to get a bootable system and see what the Setup program says. Maybe it does the mapping into space above 1 MiB.
    – Arne
    Commented Apr 2, 2018 at 21:45
  • @Arne Can you note down the chip numbers?
    – Raffzahn
    Commented Apr 2, 2018 at 22:32
  • Interestingly, my alas now defunct 286 from ICL (manufactured 87) had a mainboard built mostly from discrete logic rather than an integrated chipset, but all of its memory was in the form of 1MB plugin boards, and it was mapped correctly (or at least HIMEM.SYS reported correct total amount), so it seems that at least some manufacturers did do the mapping without an integrated chipset.
    – Jules
    Commented Apr 3, 2018 at 5:13
  • 1
    Also, here is a low res image link to the board I have (picture is not mine): vogons.org/download/…
    – Arne
    Commented Apr 3, 2018 at 11:19

The area between 640k and 1M was called the Upper Memory Area and could be used via various expedients in MSDOS & DRDOS, e.g. for TSR drivers, RAM disks and the like.

See: https://en.wikipedia.org/wiki/Upper_memory_area

If you have a working 1M 8086/8088 machine, you could look at booting MSDOS 5 and trying some HIMEM.SYS config - you should be able to shunt a lot of the OS stuff into high memory and see nearly all 640k free for a program.

Only on a 386, apparently. Or a 286, maybe.

  • I don't believe HIMEM.SYS would help here ... apart from the fact that I think it requires a 286 processor to run at all, it dealt with XMS memory, i.e. the stuff above 1MB only. You'd be looking at an EMS driver in this situation, but AFAIK all of them were hardware specific (other than EMM386 et al, which obviously required a 386 or above to work). A machine that did have memory in this area would hopefully be supplied with such a driver, or with a custom DOS version that knows how to use the memory (e.g. the RM Nimbus PC186, which IIRC had a DOS version that could use ~900KB of its 1MB RAM)
    – Jules
    Commented Apr 3, 2018 at 5:21
  • IIRC you can do DOS=HIGH in config.sys when using HIMEM.SYS. But that is all so long ago... ;)
    – Arne
    Commented Apr 3, 2018 at 7:04
  • DOS=HIGH uses the first 64KiB of memory above 1MiB. But on an 8088 or 8086, there is no memory above 1MiB. This means DOS=HIGH was useful only on the 80286 and higher, which allowed addressing beyond 1MiB via "Protected Mode". This is what HIMEM.SYS was for -- it managed the "Extended Memory" above 1MiB (including that very first 64KiB that DOS could use via DOS=HIGH)
    – Ken Gober
    Commented Apr 3, 2018 at 12:25
  • The UMB only worked in the 386 because EMM386 put the processor into virtual 8086 ("v86") mode, a protected mode where it could remap extended memory into the virtual UMB address area. As the 8086/186/286 didn't have this capability, they couldn't do this. The only way that you could use any memory in this region on an 8086 machine would be to have an EMS or RAM-disk board installed (they both existed!)
    – ErikF
    Commented Apr 3, 2018 at 17:12
  • You may be right. It was many years ago.
    – Rich
    Commented Apr 3, 2018 at 20:59

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .