home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PROGRAMS / UTILS / MEMORIA / ABOUTEMS.ZIP / ABOUTEMS.TXT
Encoding:
Text File  |  1989-09-26  |  26.7 KB  |  485 lines

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