311 lines
14 KiB
Plaintext
311 lines
14 KiB
Plaintext
|
This article appeared on USENET
|
|||
|
|
|||
|
Subject: Re: Extended Memory
|
|||
|
From: (Raymond Dunn @ Philips Electronics Ltd. - St. Laurent P.Q., Canada)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Memory up to 1 Megabyte:
|
|||
|
-----------------------
|
|||
|
|
|||
|
MSDOS is designed around the 8088 CPU which can address up to 1 megabyte of
|
|||
|
memory.
|
|||
|
|
|||
|
In "industry standard" IBM PC architecture, this memory is organized in the
|
|||
|
following way:
|
|||
|
|
|||
|
1M +-------------+ FFFFF
|
|||
|
| | System BIOS ROM
|
|||
|
| |
|
|||
|
| |
|
|||
|
| |
|
|||
|
960K +-------------+ F0000
|
|||
|
| | Option ROM and RAM
|
|||
|
| |
|
|||
|
| |
|
|||
|
816K +-------------+ CC000
|
|||
|
| | XT Hard Disk Controller BIOS ROM
|
|||
|
800K +-------------+ C8000
|
|||
|
| | Video BIOS ROM and option ROM and RAM
|
|||
|
| |
|
|||
|
768K +-------------+ C0000
|
|||
|
| | Video RAM space - various video types
|
|||
|
| | have different requirements and starting
|
|||
|
| | locations.
|
|||
|
| |
|
|||
|
640K +-------------+ A0000
|
|||
|
| |
|
|||
|
| |
|
|||
|
| | Base system RAM
|
|||
|
| |
|
|||
|
| |
|
|||
|
1286 +-------------+ 506
|
|||
|
| | Interrupt vectors and BIOS data area
|
|||
|
0 +-------------+ 0
|
|||
|
|
|||
|
MSDOS expects this architecture, and assumes that the RAM up to 640K is
|
|||
|
its resource to manage.
|
|||
|
|
|||
|
Although MSDOS will not expect to find any RAM above 640K except video RAM,
|
|||
|
even though there actually may be some which it could use, e.g. unused on a
|
|||
|
video card, on a special option card etc, it *will* however use any memory
|
|||
|
immediately above 640K if the BIOS specifies it is available. This is
|
|||
|
communicated to MSDOS at boot time by BIOS setting the memory size in location
|
|||
|
413H of the BIOS data area.
|
|||
|
|
|||
|
As an example of this, the Philips P3345 386SX based machine allows the system
|
|||
|
to be configured so that 64K is allocated at 640K to give a total of 704K of
|
|||
|
"base" system RAM. This is *only* legal if an EGA/VGA video card is not
|
|||
|
present, as this has video RAM at this address.
|
|||
|
|
|||
|
Some option cards provide RAM at other locations in the map. Applications
|
|||
|
programs may use that RAM in a proprietary way. It is not normally considered
|
|||
|
a DOS resource.
|
|||
|
|
|||
|
An example of this is the Philips P3105 XT system. It is more convenient on
|
|||
|
this machine to provide 768K of RAM using all 256K chips rather than be
|
|||
|
involved with 64K chips to provide 640K. This "extra" 128K of RAM can be
|
|||
|
enabled if required at D0000. A ramdisk driver is provided to use this
|
|||
|
memory.
|
|||
|
|
|||
|
|
|||
|
Extended and Expanded Memory:
|
|||
|
----------------------------
|
|||
|
|
|||
|
Extended memory is an intrinsic part of the architecture of the Intel
|
|||
|
processor family, expanded memory is only defined in the architecture of the
|
|||
|
IBM-PC standard.
|
|||
|
|
|||
|
*Extended* memory is memory directly in the CPU memory address space, above
|
|||
|
the 1 megabyte address.
|
|||
|
|
|||
|
It is "extended" because the 8088 can only access 1 meg. Thus "extended
|
|||
|
memory" is part of the "extended memory addressing" of the 80286 & 80386
|
|||
|
processors.
|
|||
|
|
|||
|
*Expanded* memory is paged memory which can be addressed through a Page Frame
|
|||
|
within the first 1 megabyte, and is thus accessible on all processors, even the
|
|||
|
8088. Expanded memory can be provided in a number of ways (see below).
|
|||
|
|
|||
|
The mnemonic is easy, it is in the meaning of the words:
|
|||
|
|
|||
|
-> -> -> Extended is longer. <- <- <-
|
|||
|
|
|||
|
-> -> -> Expanded is fatter. <- <- <-
|
|||
|
|
|||
|
When you buy an 80286, 80386 or 80386SX based machine which has more than 640K
|
|||
|
of RAM, that extra memory must be mapped somewhere, because *normally*, in the
|
|||
|
architecture of the PC, the area between 640K and 1M is used for video RAM,
|
|||
|
option card ROM and RAM, and the BIOS ROM.
|
|||
|
|
|||
|
Some machines map the 384K from this hole on top of any *other* extended
|
|||
|
memory above 1M. I.e. if the machine has 1M memory, the 384K is mapped at
|
|||
|
1M. If the machine has 2M memory, the 384K is mapped at 2M etc.
|
|||
|
|
|||
|
Some machines just map the memory away out of trouble at say 16 or 24Meg.
|
|||
|
|
|||
|
Some machines use all or part of it to "shadow" the system BIOS, and
|
|||
|
sometimes a proprietary Video BIOS. Thus during system initialization, these
|
|||
|
BIOSes are copied from ROM into the fast (16-bit or 32-bit) RAM,
|
|||
|
write-protected, and the BIOS from then on executes from there. This
|
|||
|
obviously requires motherboard hardware support.
|
|||
|
|
|||
|
Some machines allow all or part of the extended memory to be used as
|
|||
|
expanded memory. This is achieved either by hardware support or software
|
|||
|
emulation as described below.
|
|||
|
|
|||
|
*Some* machines allow all sorts of permutations of the above! This is an
|
|||
|
area where manufacturers of clones can *add value*.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Extended Memory:
|
|||
|
---------------
|
|||
|
|
|||
|
As *MSDOS* assumes an 8088 and can thus only address the first 1 Megabyte of
|
|||
|
the address space, extended memory on a 286 or 386 has limited use with DOS.
|
|||
|
|
|||
|
It is most commonly used as a RAM disk, because this involves only *block*
|
|||
|
access to the memory and is a nicely self-contained application, but it
|
|||
|
could also be used for caching, directly by an application, or to implement
|
|||
|
some *Expanded* Memory Scheme (EMS).
|
|||
|
|
|||
|
An 80286 has a 24 bit address space, i.e. 16 megabytes (1 meg plus 15 meg of
|
|||
|
extended memory).
|
|||
|
|
|||
|
An 80386 has a full 32 bit address space (work it out yourself!). Most AT
|
|||
|
architecture implementations using an 80386 use a private memory address bus
|
|||
|
which limits the addressing to 16 or 24 or 32 Megabytes.
|
|||
|
|
|||
|
Extended memory is not generally used in the MSDOS environment other than by
|
|||
|
RAM disk programs, disk caches, and expanded memory emulations, for several
|
|||
|
reasons:
|
|||
|
|
|||
|
- It is not available on 8088 machines so *applications* which wish to be
|
|||
|
compatible across the whole product line stay away from using it directly.
|
|||
|
|
|||
|
- It is not a standard resource, so there is no proper management of it for
|
|||
|
co-existing software (but see MSDOS 4.0 below).
|
|||
|
|
|||
|
- It is very slow and a pain in the neck to access because MSDOS runs the
|
|||
|
80286 in native mode (i.e. as an 8088). To access above 1 meg the 80286 must
|
|||
|
be switched into protected mode. This is fine, but there is no way to switch
|
|||
|
it back to native mode (this is one of the reasons that the 80286 is regarded
|
|||
|
as a brain-dead processor)!! So, the trick used is to get the keyboard
|
|||
|
controller to RESET the CPU, and the BIOS reset code recognizes this and
|
|||
|
continues! Thus it is really only good for some sort of *block* access to the
|
|||
|
memory, and there is an INT15 function in the BIOS which does this for you.
|
|||
|
All of this can be done more easily on an 80386, using its virtual 86 mode,
|
|||
|
but there are other problems running DOS in this mode (you have to trap I/O
|
|||
|
etc) and I wont go into that here. There are also the usual "how does the DMA
|
|||
|
interact with logical addressing" type problems.
|
|||
|
|
|||
|
The good news is that Unix and OS/2 make *full* use of extended memory, as
|
|||
|
they run the machine in protected mode.
|
|||
|
|
|||
|
With release 4.0, MSDOS recognizes extended memory for the first time as
|
|||
|
more than just a RAM disk resource. In addition to RAMDRIVE.SYS and a disk
|
|||
|
caching program, SMARTDRV.SYS, a device driver, HIMEM.SYS, is provided to
|
|||
|
manage the extended memory according to XMS 2.0 specification.
|
|||
|
|
|||
|
XMS is an eXtended Memory Specification standard defined jointly by
|
|||
|
Microsoft, Intel, Lotus and AST (not to be confused with LIM, see below).
|
|||
|
This specification is available from them. XMS 2.0 allows extended memory
|
|||
|
to be used by co-resident software, and, for example, allows TSR's to be
|
|||
|
positioned in extended memory.
|
|||
|
|
|||
|
Very few applications are currently written to make use of this standard -
|
|||
|
it is somewhat ironic that the provided RAM disk and disk caching routines
|
|||
|
RAMDRIVE.SYS and SMARTDRV.SYS do *not* use the XMS management routines when
|
|||
|
using extended memory, but *do* use LIM 4.0 when using expanded memory (see
|
|||
|
below)!
|
|||
|
|
|||
|
XMS 2.0 also formally makes the first 64K of extended memory available as a
|
|||
|
non protected mode memory resource using the overflow into A20 trick.
|
|||
|
|
|||
|
|
|||
|
Expanded Memory:
|
|||
|
---------------
|
|||
|
|
|||
|
There have been several standards for expanded memory. Currently this has
|
|||
|
settled down into the LIM 4.0 standard (_L_otus _I_ntel _M_icrosoft in
|
|||
|
agreement).
|
|||
|
|
|||
|
LIM 4.0 describes the following architecture:
|
|||
|
|
|||
|
PC MAIN MEMORY LIM EXPANDED MEMORY
|
|||
|
-------------- -------------------
|
|||
|
|
|||
|
+-------------+
|
|||
|
| |
|
|||
|
. Extended .
|
|||
|
. Memory .
|
|||
|
. up to . /+-------------+ 32M
|
|||
|
. 16M on the . // | |
|
|||
|
. '286, . / / | |
|
|||
|
. 4096M on . / / | Expanded |
|
|||
|
. the '386 . / / | Memory |
|
|||
|
| | / / | |
|
|||
|
1M +-------------+ / / | Divided |
|
|||
|
| | / / | into 16K |
|
|||
|
960K +-------------+ / | logical |
|
|||
|
| Page Frame | / | pages |
|
|||
|
| 12*16K | / | |
|
|||
|
| Physical | / | |
|
|||
|
| Pages | / | |
|
|||
|
768K +-------------+\ / . .
|
|||
|
| | / . .
|
|||
|
640K +-------------+/ \ . .
|
|||
|
| Page Frame | \ . .
|
|||
|
| 24*16K | \ | |
|
|||
|
| Physical | \ | |
|
|||
|
| Pages | \ | |
|
|||
|
| | \ | |
|
|||
|
256K +-------------+ \ | |
|
|||
|
| | \ \ | |
|
|||
|
| | \ \ | |
|
|||
|
| | \ \ | |
|
|||
|
0 +-------------+ \ \ | |
|
|||
|
\ \ | |
|
|||
|
\ \ | |
|
|||
|
\ \| |
|
|||
|
\+-------------+ 0
|
|||
|
|
|||
|
The expanded memory gives you up to 32M to map into up to 36 16K pages in
|
|||
|
the positions shown above.
|
|||
|
|
|||
|
The page frame below 640K which allows the existing RAM to be shadowed are
|
|||
|
usually regarded as being for the use of operating systems/environments.
|
|||
|
The page frame above 640K, in the video RAM and "PROM" area, is for
|
|||
|
applications. Code can be run or data stored interchangably in any of these
|
|||
|
frames.
|
|||
|
|
|||
|
30 functions are defined using int 67H, to allocate, map, swap etc these
|
|||
|
pages. These are provided, depending on the implementation, as a loadable
|
|||
|
driver (usually), an extension to the motherboard BIOS, or on a PROM on a LIM
|
|||
|
4.0 option card (not usual).
|
|||
|
|
|||
|
The number of actual pages available in the page frame depends on the
|
|||
|
implementaion, and how much of the address space is already occupied by
|
|||
|
option card ROMS (and perhaps RAM's) in the machine.
|
|||
|
|
|||
|
Applications which use LIM 4.0 can thus have a very large physical memory
|
|||
|
available to them, but must access it by manually switching pages as
|
|||
|
required (come back Z80 systems, all is forgiven!!)
|
|||
|
|
|||
|
LIM 4.0 can be implemented in many ways:
|
|||
|
|
|||
|
- as an option card with memory and page registers etc as I/O hardware to
|
|||
|
provide the mapping etc, and an on-board BIOS PROM to provide the
|
|||
|
functionality.
|
|||
|
|
|||
|
- as a pure software emulation in a .SYS or TSR driver:
|
|||
|
|
|||
|
- using extended memory and virtual 86 mode on an 80386 so that the
|
|||
|
memory is mapped using the MMU into any of the physical LIM pages.
|
|||
|
|
|||
|
- *copying* into the RAM pages existing below 640K, either from extended
|
|||
|
memory (if other than 8088), or from, say, disk. This is much slower as
|
|||
|
pages are swapped using copying rather than just updating page registers.
|
|||
|
|
|||
|
- using extended memory and mapping and page register logic built into the
|
|||
|
motherboard ASICs or logic on an 80286 or 80386 machine. Philips has two
|
|||
|
machines using this approach, the 80386SX based P3345 using the NEAT chipset,
|
|||
|
and the 80286 based P2230 using the G2 chipset.
|
|||
|
|
|||
|
- combinations of the above etc.
|
|||
|
|
|||
|
LIM 4.0 management is handled by its BIOS only in so far as the application
|
|||
|
can ask it what pages are free, how much memory is free to map etc., and to
|
|||
|
perform the actual mapping. The actual use of this paging is left up to the
|
|||
|
application. Neither LIM 4.0 nor DOS demand pages or anything remotely like
|
|||
|
that, nor do they support an application's use of LIM in any other way. Two
|
|||
|
or more co-existing applications can share the LIM quite happily if they are
|
|||
|
well behaved (i.e. use LIM *only* through the BIOS calls).
|
|||
|
|
|||
|
Functionality is provided to allow the saving and restoring of the page
|
|||
|
registers etc, so that even interrupt routines can safely be written to use
|
|||
|
LIM memory, assuming they allocate all their requirements up front.
|
|||
|
|
|||
|
Whether or not LIM memory will be useful to you is *application* dependant.
|
|||
|
Check to see if the applications you propose to use can take advantage of
|
|||
|
it.
|
|||
|
|
|||
|
Release 4.0x of MSDOS *does* recognize LIM 4.0's presence, and allows buffers
|
|||
|
and fastopen file names etc to be allocated in LIM pages, and DEBUG now
|
|||
|
"understands" LIM. In no way is LIM *integrated* into the operating system
|
|||
|
though. A driver, EMM386.SYS, is provided in DOS 4.0 to emulate LIM 4.0 using
|
|||
|
the *extended* memory of a 386 based machine.
|
|||
|
|
|||
|
The RAM disk and disk caching routines RAMDRIVE.SYS and SMARTDRV.SYS can be
|
|||
|
configured to use extended memory, *or* expanded memory under the control of
|
|||
|
LIM 4.0.
|
|||
|
|
|||
|
The "Lotus/Intel/Microsoft Expanded Memory Specification Version 4.0"
|
|||
|
(published by, you guessed it, Lotus, Intel and Microsoft), is the
|
|||
|
definitive manual, and is available from them.
|
|||
|
|
|||
|
--
|
|||
|
Ray Dunn.
|
|||
|
Philips Electronics Ltd. | TEL : (514) 744-8200 Ext: 2347
|
|||
|
|