home *** CD-ROM | disk | FTP | other *** search
/ Compu-Fix / Compu-Fix.iso / referenz / text / aboutems.txt < prev    next >
Encoding:
Text File  |  1993-03-01  |  26.6 KB  |  482 lines

  1.  
  2.  
  3.              EXPANDED MEMORY IN 80x86-BASED COMPUTERS UNDER MS-DOS
  4.  
  5.                                 prepared by
  6.                         John Wilson, Hyperdyne, Inc.
  7.                                 Annandale, VA
  8.  
  9. IN THE BEGINNING ...
  10.  
  11.         In the beginning, the was the 8080 microprocessor.  The 8080
  12. was, defendably, the "first" microprocessor.1  When the 8080 was
  13. invented, memory for computers was very expensive.  The 8080 could
  14. directly address 64 thousand bytes of information, which was a very
  15. great deal in those days.  Few systems (or more correctly, few
  16. system owners) could afford to actually place a full 64 K of memory
  17. in their systems.  But things changed quickly.  The Silicon Valley
  18. guys learned to make transistors smaller and better and it became
  19. much more economically feasible to talk about fully populated 64K
  20. machines.  On the software front, things like spreadsheets and word
  21. processors were being invented.  These programs were hungry for
  22. memory and the microcomputer user rapidly outgrew the 64K box.
  23.  
  24.         Before going on with the story, a little digression into the
  25. origins of the 64K limit.  This limit was the direct result of the
  26. fact that the CPU chip had only 16 address lines.  The address
  27. lines are a set of wires coming out of the CPU which allow the CPU
  28. to indicate what item of memory it wants to read or write.  In most
  29. computers, the size of the "pieces" are bytes, or 8-bit characters.
  30. These 16 wires are called the Address Bus. The voltages on the 16
  31. address lines are interpreted as a binary number (with the first
  32. pin representing the 1's place, the second pin representing the 2's
  33. place, the third pin representing the 4's place, etc.) the
  34. resultant number is the Address being addressed by the CPU.  The
  35. number of distinct patterns of 16 things, each of which can have
  36. two values, is 2 raised to the 16th power, or 65536.  This number
  37. is 64 times the quantity "1K" which is 1024.  (Early on,
  38. programmers engineers decided to use the "K" as a unit of counting
  39. things like memory because it was a nice power of two and figured
  40. it was close enough to a "real" thousand that nobody would notice).
  41. The point of this story is that the original microprocessors could
  42. only address 64K because of the simple reason that they only had
  43. 16 address lines.  Why didn't they just build one with more address
  44. lines?  Well its not that simple.  Those address lines had to have
  45. circuitry driving them, and other circuitry to actually generate
  46. the 16-bit addresses, and other circuitry to decode the new
  47. instructions that would use more than 16 bits, and so on, and so
  48. on.  And this circuitry was made of transistors.  And,
  49. unfortunately, the state of the art of chip manufacturing did not
  50. allow chips to be built with many more transistors.  So, mankind
  51. waited for the silicon boys to learn how to fit more transistors
  52. on one raisin-sized chip.
  53.  
  54.         Meanwhile, back the ranch, The Intel Corporation, in a stroke
  55. of electromarketing genius took the basic 8080 architecture and
  56. doubled up a small portion of the internal workings of the CPU's
  57. address circuitry.  They basically duplicated the address register
  58. (the transistors that hold the pattern of bits to place on the
  59. address bus), slid it left 4 bits, and added some simple circuitry
  60. to add it arithmetically to the "old" address register.  An so was
  61. born the infamous Intel Segment Register.  By making this simple
  62. kluge to the 8080, Intel created the 8086 and 8088 microprocessors
  63. which now effectively had TWENTY address lines and could therefore
  64. address 2 to the 20th locations, a little over one million bytes.
  65. This new unit was called a Megabyte even those it was further away
  66. from a million than a "K" was from a thousand, but then again you
  67. bought the "K", didn't you?  The 20 bit address bus allowed the new
  68. amazing spreadsheets to really do some amazing things. This, in
  69. turn allowed Intel to beat competitor Motorola to the marketplace
  70. (who were expanding the address bus the "right" way in their 68000
  71. family).  This in turn led IBM to select the Intel family over
  72. Motorola's as the basis of their new PC, and the rest is history.
  73.  
  74.         Using the power of the 8088, the Microsoft corporation adapted
  75. the CP/M operating system to the new chip, and, using its new
  76. power, created MS-DOS.  Because of a lot of reasons, the 8088 and
  77. MS-DOS took over the world.  And everyone was happy.  Except .....
  78. the programmers kept getting more bold in the ways they found to
  79. use memory, and the users wanted still BIGGER spreadsheets, and
  80. started playing with things like CAD/CAM, DBMSs, Artificial
  81. intelligence, desktop publishing, etc, all of which had insatiable
  82. appetites for memory.  The silicon boys kept up with the hunger by
  83. developing bigger and better CPUs, the 80286, 80386, 80486 etc.).
  84. These 80286 had a 24-bit address bus and could therefore address
  85. 16 MB of memory directly.  No one could possibly want to put that
  86. much actual memory in a PC, right?  In a pre-emptive first strike,
  87. they also created 80386 which had a 32-bit address bus and could
  88. therefore address 2 to the 32 bytes or over 4 billion
  89. bytes!  (Pow! Bam! Take THAT, Power User).  The day had finally
  90. come when the CPUs sitting on desktops could finally address more
  91. memory than anyone could afford to buy.
  92. -----------
  93. 1 Yes, there was an 8008, and a 4004 before that, but their only,
  94. surviving significance today is that they were the predecessors of
  95. the 8080.
  96. ----------
  97.  
  98.         End of problem, right?  Wrong.  Unfortunately, there were
  99. millions and millions of the 20-bit machines out there now (in the
  100. mid-1980's).  Probably more significantly there were hundreds of
  101. millions of dollars invested in MS-DOS software that did not know
  102. how to use the new 32-bit instructions and capabilities.
  103. Especially MS-DOS.  (Unix and OS/2 and a number of other less well-
  104. known operating environments do use the 32-bit mode, but MS-DOS was
  105. still king).  Because Intel wanted to sell more than 3 of these new
  106. chips, they wisely decided to build "modes" into the new chips to
  107. make them compatible with MS-DOS.  A Mode is essentially a switch,
  108. inside the CPU that turns it into another chip, insofar a all
  109. logical functionality is concerned.  So when you're running MS-DOS
  110. on your shiny new 386 or 486, you're still running with only 20
  111. bits of address and consequently a 1 MB address space.  This mode
  112. is called real mode and the lower 1 MB of addressable memory in
  113. real mode is called conventional memory.
  114.  
  115.         The solution? EMS or Expanded Memory Specification.
  116.  
  117.  
  118. EXPANDED MEMORY
  119.  
  120.         Expanded memory is a way to allow more than 1 MB of memory to
  121. be used by MS-DOS applications.  How can this be?  The CPU can only
  122. address 1 million different addresses;  how can I have more than
  123. one MB in my PC?  The answer is that the CPU re-uses the same
  124. address to get to more than one byte of data.  It does this by
  125. allowing any one address to actually be used to reference several,
  126. distinct, physically different storage locations - but only one at
  127. a time, of course.
  128.  
  129.         EMS memory usually resides on special "EMS cards", like the
  130. AST "RAMPage".  (I say usually because there are some clever ways
  131. of implementing EMS on 80286 and 80386 machines that don't use
  132. "special" EMS cards; this is discussed later in the section
  133. entitled "Software Approaches to EMS").  The EMS card has memory
  134. chips on it just like regular system memory cards.  The difference
  135. is that the memory chips on the card are not connected directly to
  136. the CPUs address bus.  These chips are actually wired to another
  137. address bus, totally contained on the card, that has more than 20
  138. address bits, usually 24 or so.  Where do these extra address bits
  139. come from?  Well some of them are just passed-through systems
  140. address bits.  The rest come from special storage locations onboard
  141. the EMS card, called page registers.  How are these page registers
  142. loaded?  These registers are themselves directly addressable by the
  143. CPU.  To access a byte of data in EMS memory, the CPU first loads
  144. the page register (itself simply another location accessible by the
  145. CPU) and then makes a normal memory reference.  Some of the bits
  146. come from the address bus, and the rest come from the bits
  147. previously squirreled away in the page registers.  Thus, it can be
  148. seen that a given address on the regular CPUs address bus forms
  149. only part of the address needed to select a particular byte of
  150. memory on the EMS card.  To uniquely identify a byte, you need to
  151. specify the regular address plus the contents of the page register.
  152. It follows that one CPU address can correspond to several EMS
  153. memory locations, each of which differs only by the contents of the
  154. page register.  The CPU can thus access more than 1 MB of memory
  155. on the EMS card by using its normal address bus augmented by the
  156. page registers.
  157.  
  158. HOW IT ALL FITS TOGETHER
  159.  
  160.         In the early versions of EMS, all EMS memory was mapped to
  161. appear to be in a special address range in the range of all
  162. possible addresses accessible by the CPU.  This was usually at
  163. addresses between D0000 and DFFFF (in hexadecimal notation).  This
  164. includes exactly 64KB possible addresses.  This area of address
  165. space is called the Page Frame, an analogy to a frame around a
  166. picture.  The page frame is logically divided into 4 16KB "pages".1
  167. When we say that the EMS memory is "mapped" into this range, what
  168. we mean is that the EMS card does not respond to any addresses
  169. outside this range.  When an address is placed on the address bus
  170. ----------
  171. 1 For the sake of simplicity in the following discussion, the
  172. multi-page nature of the page frame will not be mentioned further.
  173. The explanations apply to each page within the page frame
  174. individually.  It should also be noted that, strictly speaking, the
  175. 4-page, 64 KB page frame applies only to EMS versions 3.2 and
  176. earlier.  In EMS 4.0+, the page frame is not limited to just 4
  177. pages and can, in fact, be all or partially located within the 640
  178. KB address range normally occupied by conventional RAM.  This
  179. feature is used by various multitasking overlays to DOS, such as
  180. Desqview, which actually allow program code to be paged in and out.
  181. ----------
  182.     outside this range, the EMS board remains totally passive, just
  183. like it was not plugged in at all.  When the CPU asserts an address
  184. within this range, the EMS board comes to life and responds like
  185. regular memory.  When the CPU references the EMS address space, the
  186. CPUs address bits are used along with the page register bits to
  187. actually specify which EMS byte to access.  The net effect is to
  188. make the EMS card memory appear as a series of "banks" which can
  189. be made (one at a time) to masquerade as "real" system memory at
  190. a certain address in the range D0000-DFFFF hex.  These banks are
  191. called EMS pages.  Within each page, the practically any byte
  192. addressed is selected by the system address bus bits that were
  193. passed through by the EMS circuitry.  The particular page selected
  194. is determined by what value was previously written into the EMS
  195. page registers.  All the physical EMS memory locations that respond
  196. to a common value in the page registers are said to be in the same
  197. page.  That is, once that special value is loaded into the page
  198. register, any of those locations can be accessed by the CPU using
  199. normal memory read/write instructions.  If another value is loaded
  200. into the page registers, a totally different set of EMS memory
  201. bytes (i.e, physically different transistors) are made to respond
  202. to the same CPU addresses as before.
  203.  
  204.         The model that this behavior suggests is that the EMS memory,
  205. divided up into 16K pages, exists out in limbo somewhere, and is
  206. unable to be addressed by the CPU in any way.  The CPU can however
  207. invoke the right magic to instantaneously plug any one of these
  208. disembodied pages right into its addressable memory space.  The
  209. magic consists of loading the Holy Page Register.  The CPU can,
  210. with equal ease, banish that same page back into limbo, by putting
  211. a different value in the page registers.  The thing that makes this
  212. magic useful is that, any data stored in an EMS page is faultlessly
  213. remembered even after it has been banished to zombie land.  And,
  214. furthermore, that data can be read by the CPU just by remapping it
  215. into the address space.
  216.  
  217.         This means that an MS-DOS program can juggle megabytes of
  218. memory resident data using just 20 address bits in good old 8088
  219. real mode.  Of course at any one given instant, most of that data
  220. is in zombie land, but no matter, it can be called back from the
  221. netherworld with a simple, hardware-assisted incantation in
  222. microseconds.
  223.  
  224. EMS MEMORY MANAGERS OR DRIVERS
  225.  
  226.         Each manufacturer of an EMS board is free to actually design
  227. the actual  circuitry of his EMS board to suit his whim, his
  228. engineers, and his marketing plan.  Most boards are different in
  229. a real, physical way from one another.  The magic incantations
  230. necessary to shuffle EMS pages between here and Hoboken is
  231. different for each one.  Does each application program need to know
  232. which particular brand/model of board is plugged in and what its
  233. religion is?  Fortunately not.  Enter the Enhanced Memory
  234. Specification.   EMS is a specification of a standardized way that
  235. applications interact with EMS hardware.  This interaction is via
  236. the software interrupt feature of the 8088/MS-DOS.  All
  237. applications that wish to use EMS memory call interrupt 67H the
  238. same way with the same arguments, no matter who made the board.
  239. When the interrupt is issued, control passes to the memory resident
  240. EMS management software, usually called either an EMS memory
  241. manager or EMS driver (same thing).  This piece of software is
  242. unique to each brand of board and is normally supplied by the
  243. boards vendor.  It is the express purpose of this piece of software
  244. to turn the standard EMS invocation arguments into the particular
  245. set of hardware incantations understood by the board.  Beware
  246. mixing boards and drivers from different sources!  This may work
  247. in rare circumstances but will eventually lead to consumption of
  248. excessive amounts of alcoholic beverages.
  249.  
  250. EXTENDED MEMORY
  251.  
  252.         OK. Now we know how EMS works: it expands a selected 64KB-
  253. sized range of addresses in the CPUs address space to several
  254. megabytes by paging-in one chunk at a time.  But what about
  255. "Extended Memory"?.  Actually extended memory is a much simpler
  256. concept.  Remember those unused address lines in the 80286 and
  257. 80386? (MS-DOS and other real-mode applications only use the first
  258. 20 of the 80286's 24 and the 80386's 32).  They were not put there
  259. for decoration.  The CPU can be put in Protected Mode  and can then
  260. use those extra address lines to address megabytes and megabytes
  261. of memory without needing the help of the special EMS hardware like
  262. page registers and private (EMS-card) address busses.  In protected
  263. mode, the CPU           can address all physical memory in the same, natural
  264. way.  In fact, the one megabyte boundary loses all significance,
  265. except for the painful memory of what it used to be like back in
  266. that awful 20-bit real mode.  Extended memory is thus just like
  267. conventional memory, just extended up to higher addresses.  The
  268. down side is, of course, that MS-DOS does not know how to switch
  269. into protected mode, and wouldn't know what to do there if it did.
  270. Rectifying this shortcoming, and all its implications, is the sole
  271. reason for OS/2.
  272.  
  273. SOFTWARE APPROACHES TO EMS IMPLEMENTATION
  274.  
  275.         The discussion of EMS so far has talked exclusively about
  276. hardware approaches to EMS.  In the 8088, hardware must be employed
  277. to supplement the deficiencies of that chip.  In the 80286 and
  278. 80386, however, there are software-only methods to give the same
  279. functionality as EMS hardware.  Both approaches use extended memory
  280. for the storage of EMS page data.
  281.  
  282.         In the 80286, EMS memory contents are brought into the 1 MB,
  283. conventionally-addressable range by physically copying 16 KB blocks
  284. of memory to and from extended memory.  The EMS "page" that the
  285. application program sees is actually a block of conventional memory
  286. that has been filled with the contents of a block of extended
  287. memory.  The copying is done  by a piece of software known as an
  288. EMS Emulator (driver) which is usually loaded like other DOS device
  289. drivers in CONFIG.SYS.   Note that to access the extended memory,
  290. the EMS Driver must switch into protected mode, copy the data, then
  291. hightail it back into real-mode to keep DOS happy.  The extended
  292. memory blocks, in this scheme, are emulating a block of memory that
  293. would normally be physically resident on the EMS card.  Note that
  294. these are not really "paged"-in in the same sense as true EMS
  295. pages, nor is there any "mapping" going on.  All physical memory
  296. contents retain their actual addresses as far as the CPU is
  297. concerned, only there contents are copied back and forth.
  298.  
  299.         The advantage of this scheme is that EMS functionality can be
  300. achieved in machines without actual EMS hardware.  A disadvantage
  301. of this scheme is its performance.  Whole 16K blocks must be moved
  302. to access a new page (which takes milliseconds), in contrast to
  303. "true" EMS where just a page register must be loaded (which takes
  304. microseconds).  Another disadvantage is the fact that some precious
  305. conventional memory is consumed by the emulated page frame.
  306.  
  307.         In the 80386, the solution is much more elegant.  In true EMS,
  308. the contents of the page registers can be thought of as a memory-
  309. mapping table.  That is, the contents of the page register, in
  310. essence, point to a particular block of EMS-card-resident memory -
  311.  change the page register contents and a new physical page shows
  312. up in the page frame.  The 386 was designed for operating systems
  313. much more sophisticated than MS-DOS; these operating systems take
  314. for granted the presence of memory mapping capability.  The 80386
  315. has, in fact, an internal memory mapping facility much more
  316. sophisticated than the crude, bank-oriented page registers of an
  317. EMS card.  The 386's memory management unit allows any arbitrary-
  318. sized chunk of physical memory to be mapped to anywhere in the
  319. address space, including the lower 1 MB.  And, most importantly,
  320. to the address were an EMS-aware application expects to find the
  321. page frame and the EMS pages contained therein.  With the 80386,
  322. hardware within the CPU performs the mapping previously done by EMS
  323. hardware.  Programming of the CPUs mapping registers is performed
  324. by a device driver usually known as an Expanded Memory Manager.
  325. Memory managers are written to run on the (standard) 80386 and not
  326. some particular vendor's EMS hardware.  This allows third-party
  327. vendors to produce EMS emulators for any 80386.  Examples are
  328. "QEMM-386" by Quarterdeck Systems and "386-to-the-Max" by Qualitas.
  329.  
  330.         Finally, there is one more software approach to EMS that can
  331. be used with any machine.  That approach is called Virtual EMS and
  332. employs a system's hard disk as storage for EMS pages.  A device
  333. driver intercepts EMS calls in much the same way as the approach
  334. described above for the 80286, except that copying is done between
  335. a page frame in conventional memory, and sectors of your hard disk.
  336. This is a clever approach, and allows EMS memory to be much greater
  337. than the amount of memory in your machine, but, because disk is
  338. thousands of times slower than semiconductor memory, this approach
  339. should only be used by the terminally desperate.
  340.  
  341.         APPENDIX - SUMMARY FOR USERS
  342.  
  343.         EMS is the specification of a software technique for making
  344. more than 640 KB (the normal DOS limit) available to your programs.
  345. Put simply, EMS reserves a block of memory space in your PC and
  346. allows a block of RAM (usually resident on an EMS card) to be
  347. switched into that address range.  There are generally many
  348. identical blocks of RAM present on the EMS card, each and any one
  349. of which can be "plugged" in -- only one at a time.  Your CPU can
  350. use one of these blocks to store data in, and then switch in
  351. another block, store data in that, switch in yet another block, and
  352. so on, and so on.  Later, the CPU can recall these blocks in the
  353. same or different order and read back the original data.  In many
  354. ways, this performs the same function as your system's disk --
  355. except that it's all done in solid-state memory and is thousands
  356. of times faster.
  357.  
  358.         There are four approaches to actually implementing EMS,
  359. depending to some extent, on what type of machine you have.  These
  360. approaches are:
  361.  
  362.                 -       an EMS memory card (like the AST "Rampage") [any DOS
  363.                         computer, but usually 8088s or 80286s]
  364.  
  365.                 -       an EMS emulator [80286 or 80386, but usually only
  366.                         on 80286's]
  367.  
  368.                 -       an Extended Memory Manager [386 only] (for example
  369.                         Quarterdeck System's "QEMM-386 or Qualitas's "386-
  370.                         to-the-Max" )
  371.  
  372.                 -       a Virtual Memory Manager [any DOS machine]
  373.  
  374.         An EMS memory card is more than just a memory expansion card:
  375. it contains special circuitry to perform the bank-switching
  376. operation discussed above.  To use an EMS card, you will have to
  377. perform two steps:
  378. (1) Configure the EMS card hardware to match your computer's
  379. configuration and (2) install a special EMS card driver for the
  380. board in your CONFIG.SYS file.  Details and procedures differ for
  381. different makes and models of EMS cards.  Consult your EMS card's
  382. users manual for instructions.  Note that drivers are usually card-
  383. specific; you cannot, in general, use Vendor A's driver with Vendor
  384. B's card.
  385.  
  386.         Not all "memory" expansion cards are EMS cards.  There is
  387. another type of memory called extended memory which is used by
  388. other operating systems such as OS/2 and Unix.  It is also used by
  389. a few DOS utilities, most notably IBM's VDISK RAM disk emulator.
  390. If your computer is advertised as having more than 640 KB of memory
  391. installed, it's a good bet that it's extended memory and not EMS
  392. memory.  Few applications can use extended memory, although by using a
  393. software technique which will be discussed in a moment, extended
  394. memory can be made to serve as EMS memory.  Before deciding on an
  395. EMS strategy, determine the type of memory your computer already
  396. has installed.  Be forewarned: IBM, as usual, has a different name
  397. for extended memory (like everything else).  They call it (you
  398. guessed it) expanded memory.  So, if you bought it from IBM, and
  399. it's called expanded memory, it's extended memory.  Everyone else
  400. pretty much sticks to standard nomenclature but to be sure, look
  401. for the phrase "EMS x.x compliant" in the documentation, where x.x
  402. is usually a number like 3.2 or 4.0.
  403. ----------
  404. 1 The 'S' in EMS stands for "Specification".  EMS is not a
  405. particular way to build EMS memory, rather, it is the specification
  406. of a software interface to it.  Different vendors can, and do,
  407. implement EMS differently.  What is the same, however, is the way
  408. that applications programs interface to this memory.
  409. ----------
  410. Many EMS cards allow the memory contained on them to be
  411. configured as all EMS memory, all extended memory, or a mixture.
  412. If you use VDISK or any other special programs that use extended
  413. memory, you may wish to reserve part of the board's memory for use
  414. as extended memory.  Otherwise, there's really no good reason for
  415. not configuring all of your memory as EMS.  (Note that EMS boards
  416. are generally more expensive than "plain" extended memory boards
  417. because of the additional circuitry required).  Consult your
  418. board's users manual for the proper switch settings or software
  419. settings to give the mix you desire.  EMS cards can be used in any
  420. machine, but are usually found in 8088s and 80286s because there
  421. is a better and cheaper way to go in 80386s as will be discussed
  422. below.
  423.  
  424. EMS EMULATORS
  425.  
  426.         A less common approach to implementing EMS in your computer
  427. is a EMS Emulator.  This is a software-only approach that requires
  428. no special hardware to use.  It essentially turns extended memory
  429. into expanded memory.  Unfortunately, there is a price for this
  430. magic - performance.  Because extended memory lacks the special
  431. hardware to switch its address like the blocks of memory on an EMS
  432. card, this software must copy whole blocks of data (16 KB's worth)
  433. back and forth between your program and extended memory every time
  434. a new block is required -- even if it's just to read a single byte.
  435. Depending on the nature of the program, this can be a few times
  436. slower or hundreds of times slower than "true" EMS.
  437. This is not a recommended solution for
  438. that reason, however, if necessary, it can be used.  This approach
  439. can only be used on 80286 and 80386 machines which have extended
  440. memory.  Machines based on the 8088 (like the original PC and XT)
  441. cannot accommodate extended memory.  On the 80386, a much better
  442. solution is described below.
  443.  
  444. EXTENDED MEMORY MANAGERS
  445.  
  446.         Built into every 80386 is a special capability that can be
  447. used to do an excellent job of providing EMS memory without the use
  448. of EMS hardware.  This facility is called the paging unit or Memory
  449. Management Unit (MMU).  The MMU consists of circuitry very much
  450. like the switching circuitry onboard EMS cards, except much more
  451. sophisticated.  It was actually included for use by advanced
  452. operating systems but can be used quite nicely to emulate EMS in
  453. 80386-based DOS machines.  The MMU, like the EMS emulators, can
  454. turn extended memory into expanded memory through software-only
  455. means.  Unlike those emulators, the MMU, in conjunction with a
  456. piece of software known as an Extended Memory Manager (EMM), does
  457. not suffer any performance penalty.  In fact, it is usually faster
  458. than true EMS cards because: the circuitry is onboard the CPU chip;
  459. the 80386 is faster than lower-class machines that usually use EMS
  460. cards; and the extended memory used is often fast, 32-bit system
  461. memory rather than card-based memory which is slowed down by the
  462. relatively slow I/O bus.  On 80386 systems, this is definitely the
  463. way to go.  Excellent EMMs include "386-to-the-Max" by Qualitas,
  464. Inc., and "QEMM-386" by Quarterdeck systems, Inc..  To use these
  465. EMMs, you need to install them in your CONFIG.SYS file.  Like the
  466. EMS cards, you will have to configure them to partition your
  467. available system memory between extended and expanded memory.
  468. Consult the users manual for the package you are using.
  469.  
  470. VIRTUAL MEMORY MANAGERS
  471.  
  472.         Virtual Memory Managers are another software-only approach to
  473. EMS.  These function almost identically to the EMS emulators
  474. discussed above, except that they use the system disk rather than
  475. extended memory as the storage medium for blocks of memory copied
  476. out of your program.  As you can imagine, this is excruciatingly
  477. s-l-o-w.  Use this approach only as a last resort.
  478.  
  479.  
  480.  
  481.  
  482.