[comp.sys.ibm.pc] EMS

iain@batserver.cs.uq.oz.au (Iain Fogg) (04/12/90)

I recently downloaded EMS40V11.ARC from SIMTEL-20. My old EMS driver was
version 3.4 and 4DOS complains a bit with that loaded. I have installed
the new driver and the 4DOS problem has disappeared, but I am a bit
confused about a couple of things. I hope someone can help.

BTW I have a 386 clone with 4M of RAM - 3M extended.

When the EMS driver is installed it displays the following message on
the screen:

	EMS 4.0 Simulator, Ver. 1.1 (C) 1989 Ziff Communications
	PC Magazine + Douglas Boling

The documentation I have says that if no parameter is given to the
driven at startup, 384K will be used as a default. This suggests to me
that if the driver is installed with no parameters, the 384K of memory
above the 640K waterline will become expanded memory. Does this make
sense - isn't the video buffer located in this part of memory? Also,
what happens when the ROM BIOS is relocated to RAM - where is it
typically relocated to. Again if its somewhere above the 640K mark, and
I've installed the EMS driver with no parameters, won't I have big
problems?

I actually install the driver with 3072 as a parameter, hoping that this
tells the driver I have 3M of extended memory. In other words, (I think)
I want to tell the driver to start expanded memory at the 1M mark and go
from there.

Any advice on the installation of EMS drivers would be most welcome, in
particular the driver I've mentioned above.

On a related point, my old version 3.4 driver is ~10K bigger that the
new version 4.0 job (i.e. length of .SYS file), but the new driver uses
~50K more low memory that the old one. I think the old driver used
memory above 640K as a frame buffer for EMS memory. I can only guess
that this new driver is using memory below 640K. Does this sound
reasonable? This is fairly concerning because 50K of low memory is quite
a slab. Again, advice/comments welcome.

Iain.

PS. If you require any more detailed information to answer my questions
please email to:
    iain@batserver.cs.uq.oz.au

cs4g6ag@maccs.dcss.mcmaster.ca (Stephen M. Dunn) (04/13/90)

In article <3238@moondance.cs.uq.oz.au> iain@batserver.cs.uq.oz.au writes:
$BTW I have a 386 clone with 4M of RAM - 3M extended.

   So the 3M starts at the 1M mark, and the other 384K is probably used
for ROM BIOS and video BIOS shadowing.

$	EMS 4.0 Simulator, Ver. 1.1 (C) 1989 Ziff Communications
$	PC Magazine + Douglas Boling

   Unless this has been made aware of the 386 (and I don't know if it
has or not), this is not a good choice.  If it is not 386-aware, then
it performs its task by copying chunks of memory from extended into
conventional (i.e. SLOW and eats up 64K of your main memory) and it
will return to real mode via a CPU reset (yech!  SLOW!).  Of course, if
it does recognize a 386, that's no problem.

$The documentation I have says that if no parameter is given to the
$driven at startup, 384K will be used as a default. This suggests to me
$that if the driver is installed with no parameters, the 384K of memory
$above the 640K waterline will become expanded memory. Does this make
$sense - isn't the video buffer located in this part of memory? Also,

   This is likely not correct for three reasons:

1.  Your other 384K is probably being used for shadowing of ROMs, so the
    384k it mentions will be from the upper 3M
2.  Most boards, if they don't do shadowing, don't map any of the memory
    into the 640K-1M region; instead, you'd have 3M + 384k starting at
    the 1M boundary.  The fact that you only have 3M there suggests to
    me that the rest is being used for shadowing.
3.  Extended memory is usually allocated from the top of memory downwards,
    so it would take the last 384k of extended memory.  This is because
    the only support for extended memory in the original AT is a word that
    says how much there is ... so programs will take the highest chunk
    they can find and then change this word so that other programs which
    come along later will think there's less than there is.

   The video buffer is located in that region ... addresses A0000 through
BFFFF are reserved for video RAM.  Also, ROM BIOS and BIOS extensions
such as those found in video cards go in the upper 256k of memory, as do
network adapters and anything else that needs to have some of its
on-board memory mapped into the memory address space.

$what happens when the ROM BIOS is relocated to RAM - where is it
$typically relocated to. Again if its somewhere above the 640K mark, and
$I've installed the EMS driver with no parameters, won't I have big
$problems?

   I would imagine that the ROM BIOS is copied to RAM at the same location
the BIOS used to be at.  This is by far the simplest solution, since it
avoids problems such as having to relocate the code as you move it (and
try doing that with binary code!)

$On a related point, my old version 3.4 driver is ~10K bigger that the
$new version 4.0 job (i.e. length of .SYS file), but the new driver uses
$~50K more low memory that the old one. I think the old driver used
$memory above 640K as a frame buffer for EMS memory. I can only guess
$that this new driver is using memory below 640K. Does this sound
$reasonable? This is fairly concerning because 50K of low memory is quite
$a slab. Again, advice/comments welcome.

   Yes, this is in fact what is happening.  This driver must not be
aware that it's running on a 386.  The 386's built-in memory management
unit can map 4k pages of memory from anywhere in the address space to
any other place - which means that it can map selected 16k EMS pages
from anywhere in the extended address space into gaps in high memory,
exactly emulating hardware EMS.  EMS40, however, assumes it's running
on a 286, which can't do this, so it eats about 70k of low memory, which
includes 64k that's used as the page frame, and it copies stuff back
and forth between the actual location in extended memory and the
apparent location in low memory.  This is the only way to do it in
software on a 286, but is exceptionally inefficient given what the 386
is capable of.  I'd strongly advise you to ditch this driver and buy
one of the commercial drivers for the 386 (they aren't very expensive)
that does a much better job.

-- 
               More half-baked ideas from the oven of:
****************************************************************************
Stephen M. Dunn                               cs4g6ag@maccs.dcss.mcmaster.ca
     <std_disclaimer.h> = "\nI'm only an undergraduate ... for now!\n";

phil@pepsi.amd.com (Phil Ngai) (04/14/90)

In article <26255292.20756@maccs.dcss.mcmaster.ca> cs4g6ag@maccs.dcss.mcmaster.ca (Stephen M. Dunn) writes:
|$	EMS 4.0 Simulator, Ver. 1.1 (C) 1989 Ziff Communications
                ^^^^^^^^^

Note this word well! This driver is worth every penny you paid for
it on a 286, but less on a 386. It is a perfect example of how
worthless the damn EMS 4.0 spec is.

--
Phil Ngai, phil@amd.com		{uunet,decwrl,ucbvax}!amdcad!phil
The War on Drugs is the modern day Inquisition.

hd7x@vax5.cit.cornell.edu (04/14/90)

In article <3238@moondance.cs.uq.oz.au>, iain@batserver.cs.uq.oz.au (Iain Fogg)
writes:
> I recently downloaded EMS40V11.ARC from SIMTEL-20. My old EMS driver was
> version 3.4 and 4DOS complains a bit with that loaded. I have installed
> the new driver and the 4DOS problem has disappeared, but I am a bit
> confused about a couple of things. I hope someone can help.
> 
> BTW I have a 386 clone with 4M of RAM - 3M extended.
> 
> When the EMS driver is installed it displays the following message on
> the screen:
> 
> 	EMS 4.0 Simulator, Ver. 1.1 (C) 1989 Ziff Communications
> 	PC Magazine + Douglas Boling
>	[rest of story deleted]

Well, first of all, if you have a 386, you shouldn't be using PC Mag's EMS
simulator, since that was designed to work on 286 machines and won't take
advantage of the features of the 386.  So yes, you are wasting memory - you
should get Qualitas' 386 to the Max, or Quarterdeck's QEMM-386.

The 384K is already above the 1MB boundary, so you don't have to worry about
that.

-Sanjay Aiyagari (HD7X@vax5.cit.cornell.edu)

akm@spencer.cs.uoregon.edu (Anant Kartik Mithal) (04/14/90)

In article <3876.2625f50e@vax5.cit.cornell.edu> hd7x@vax5.cit.cornell.edu writes:

>Well, first of all, if you have a 386, you shouldn't be using PC Mag's EMS
>simulator, since that was designed to work on 286 machines and won't take
>advantage of the features of the 386.  So yes, you are wasting memory - you
>should get Qualitas' 386 to the Max, or Quarterdeck's QEMM-386.
>
>The 384K is already above the 1MB boundary, so you don't have to worry about
>that.

Not so. If it is shadow RAM, then it is below 1MB. Many bioses set the memory
between 640 K and 1MB to shadow if the computer has more than 2 MB, so the
original poster was right to be concerned.

kartik




-----------------------------------------------------------------------------
Anant Kartik Mithal					akm@cs.uoregon.edu
Department of Computer Science				akm@oregon.BITNET
University of Oregon