home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1993 #2
/
Image.iso
/
clipper
/
emm501s.zip
/
READ.ME
< prev
Wrap
Text File
|
1993-05-19
|
7KB
|
189 lines
05/11/1993 EMM501.ZIP V1.01
---------- ----------------
This archive contains the following two files:
EMM501.ASM Assembler source
EMM501.OBJ EMS detection fix for Clipper S'87 - 5.01a
READ.ME Documentation (this file)
This fix is applicable to:
Clipper 5.01/5.01a
Clipper S'87
This fix is *not* required with Clipper 5.2 / 5.2a.
THIS REPLACEMENT MODULE HAS NOT BEEN TESTED OR APPROVED BY COMPUTER
ASSOCIATES INTERNATIONAL.
Disclaimer
----------
The software contained within this archive is provided as-is and without
warranty.
The author makes no claim as to the software's fitness for a specific
purpose. Under no circumstances will the author be held liable for
damages of any kind arising out of the use of or inability to use this
software.
Purpose
-------
The purpose of this replacement module is to correct deficiencies in
Clipper's detection of a functional EMS driver when certain EMS emulator
switches are used. There are two problems that are corrected:
1) Proper detection of a functional EMS driver
2) Proper detection of the (required) pageframe
Use of this fix prevents Clipper from attempting to use EMS memory in
situations where it erroneously believes it can.
The following tables indicates the various EMS drivers and switches that
could cause problems prior to these fixes:
EMM Driver DOS Switches Works as is Works with fix
---------------------------------------------------------------
EMM386.EXE 6.0 NOEMS NO YES
EMM386.EXE 6.0 NOEMS NOVCPI YES YES
EMM386.EXE 6.0 FRAME=NONE NO YES
EMM386.EXE 5.0 NOEMS YES YES
EMM386.EXE 5.0 FR=NONE NO YES
QEMM386 N/A FRAME=NONE NO YES
QEMM386 N/A NOEMS YES YES
NOTE: - Summer '87
------------------
EMM501.OBJ corrects the EMS detection problem in Summer '87. It does
*not* correct any other problems that Summer '87 may have / is
rumoured to have regarding EMS.
These fixes should work equally well with other EMS emulators that
provide similar switches, such as 386MAX.
Symptoms that indicate you need this fix
----------------------------------------
You *will* need this fix if you know that you have set EMS driver
options that match one of the above settings and the 'Works as is'
column is 'NO'.
You may need this fix if your program operates normally for a while, and
then suddenly locks up solid or produces an exception error .AND. the
program works correctly when //E:0 is set in the Clipper environment.
You may need this fix if your program operates correctly when //E:0 is
set in the Clipper environment variable, but does not otherwise.
Linking
-------
Link the replacement OBJ into your program as you would any other OBJ,
but make sure it is not the first OBJ specified (particularly IMPORTANT
if you're using Blinker). You should link it into the ROOT of your
program.
Blinker
-------
FILE myapp # Your first Clipper OBJ
BEGINAREA
FILE abc
FILE def
ENDAREA
FILE EMM501
LIB ...
RTLINK
------
FILE myapp
FILE EMM501
MSLink or equivalent
--------------------
link myapp+EMM501 ;
NOTE: Depending on your linker and the version of Clipper, you may get a
'duplicate definition' for the symbol '__e_avail' this is expected and
you may safely ignore this warning.
Problems
--------
This fix should cause no new problems. If you still have an unexplained
problem after linking it, please check that you have not linked it as
the first OBJ. If you still have a problem, it is most *unlikely* to be
due to this fix.
NOTE: Under no circumstances should you contact Computer Associates
International, Blink Inc, or ASM Inc, regarding problems with this
replacement module - they will not be able to help you.
If there are bona-fide problems with this module I would like to hear
about them and will correct them if possible, but please understand that
I make no commitment to do so. I can be contacted at the CIS ID listed
below.
Technical Notes
---------------
For those who are interested...
In order to use EMS memory, Clipper requires an EMS driver supporting
EMS 3.2 or better, and that the driver provide a 64K pageframe.
One of the standard ways of checking for the presence of an EMS driver
is to look for a particular signature at a particular memory location.
Under normal circumstances, that signature is 'EMMXXXX0'.
Unfortunately versions of Clipper prior to 5.2 do not properly check for
this signature, instead they look for just 'EMM' which under normal
circumstances works ok. However, more recent EMS emulators, such as
QEMM, EMM386 and 386MAX are capable of providing EMS services without
the need for a pageframe through the use of a driver switch (such as
FRAME=NONE, or NOEMS with DOS 6's EMM386). To indicate that full EMS
services are not available, some of these drivers (but not all) change
the driver signature to 'EMMQXXX0', so that software checking for
'EMMXXXX0' will not find a match, and disable their EMS use.
Unfortunately, as Clipper only checks for the 'EMM' portion of the
signature, it does not realise that full EMS services are not available.
This problem is further compounded by another problem - detection that
the pageframe is not present. After checking the driver is present by
matching signatures, Clipper asks the driver for the address of the
pageframe. In the case that the pageframe is not present, the driver
returns an error code to Clipper, but Clipper ignores this error code,
and takes a 'random' value for the pageframe address, which will
coincidentally be in low memory. As soon as the VM system needs to page
some data out to EMS, it will write to this address, overwriting
whatever is there (DOS, device drivers or the interrupt vector table).
This will usually cause an immediate lockup (or an exception error), and
explains why a Clipper 5.x program can run for a short while before the
problem is apparent.
EMM501.OBJ ensures that the signature is matched correctly, and also
that Clipper will not attempt to use EMS when the pageframe is not
present.
Malcolm Shedden
ASM Inc.
CIS: 76030,1031.
History
-------
4/20/1993 V1.0 released.
5/11/1993 V1.01 the only change is that source code is now included.
-= This file was brought to you via CLN -=
±max