home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1993 #2 / Image.iso / clipper / emm501s.zip / READ.ME < prev   
Text File  |  1993-05-19  |  7KB  |  189 lines

  1. 05/11/1993                  EMM501.ZIP V1.01
  2. ----------                  ----------------
  3.  
  4. This archive contains the following two files:
  5.  
  6. EMM501.ASM      Assembler source
  7. EMM501.OBJ      EMS detection fix for Clipper S'87 - 5.01a
  8. READ.ME         Documentation (this file)
  9.  
  10. This fix is applicable to:
  11.  
  12. Clipper 5.01/5.01a
  13. Clipper S'87
  14.  
  15. This fix is *not* required with Clipper 5.2 / 5.2a.
  16.  
  17. THIS REPLACEMENT MODULE HAS NOT BEEN TESTED OR APPROVED BY COMPUTER
  18. ASSOCIATES INTERNATIONAL.
  19.  
  20. Disclaimer
  21. ----------
  22.  
  23. The software contained within this archive is provided as-is and without
  24. warranty.
  25.  
  26. The author makes no claim as to the software's fitness for a specific
  27. purpose.  Under no circumstances will the author be held liable for
  28. damages of any kind arising out of the use of or inability to use this
  29. software.
  30.  
  31. Purpose
  32. -------
  33.  
  34. The purpose of this replacement module is to correct deficiencies in
  35. Clipper's detection of a functional EMS driver when certain EMS emulator
  36. switches are used. There are two problems that are corrected:
  37.  
  38. 1) Proper detection of a functional EMS driver
  39. 2) Proper detection of the (required) pageframe
  40.  
  41. Use of this fix prevents Clipper from attempting to use EMS memory in
  42. situations where it erroneously believes it can.
  43.  
  44. The following tables indicates the various EMS drivers and switches that
  45. could cause problems prior to these fixes:
  46.  
  47.   EMM Driver    DOS     Switches     Works as is   Works with fix
  48.   ---------------------------------------------------------------
  49.   EMM386.EXE    6.0     NOEMS            NO            YES
  50.   EMM386.EXE    6.0     NOEMS NOVCPI     YES           YES
  51.   EMM386.EXE    6.0     FRAME=NONE       NO            YES
  52.   EMM386.EXE    5.0     NOEMS            YES           YES
  53.   EMM386.EXE    5.0     FR=NONE          NO            YES
  54.   QEMM386       N/A     FRAME=NONE       NO            YES
  55.   QEMM386       N/A     NOEMS            YES           YES
  56.  
  57.   NOTE: - Summer '87
  58.   ------------------
  59.  
  60.   EMM501.OBJ corrects the EMS detection problem in Summer '87. It does
  61.   *not* correct any other problems that Summer '87 may have / is
  62.   rumoured to have regarding EMS.
  63.  
  64.   These fixes should work equally well with other EMS emulators that
  65.   provide similar switches, such as 386MAX.
  66.  
  67. Symptoms that indicate you need this fix
  68. ----------------------------------------
  69.  
  70. You *will* need this fix if you know that you have set EMS driver
  71. options that match one of the above settings and the 'Works as is'
  72. column is 'NO'.
  73.  
  74. You may need this fix if your program operates normally for a while, and
  75. then suddenly locks up solid or produces an exception error .AND. the
  76. program works correctly when //E:0 is set in the Clipper environment.
  77.  
  78. You may need this fix if your program operates correctly when //E:0 is
  79. set in the Clipper environment variable, but does not otherwise.
  80.  
  81. Linking
  82. -------
  83.  
  84. Link the replacement OBJ into your program as you would any other OBJ,
  85. but make sure it is not the first OBJ specified (particularly IMPORTANT
  86. if you're using Blinker). You should link it into the ROOT of your
  87. program.
  88.  
  89. Blinker
  90. -------
  91.  
  92. FILE myapp    # Your first Clipper OBJ
  93. BEGINAREA
  94.     FILE abc
  95.     FILE def
  96. ENDAREA
  97. FILE EMM501
  98. LIB ...
  99.  
  100. RTLINK
  101. ------
  102.  
  103. FILE myapp
  104. FILE EMM501
  105.  
  106. MSLink or equivalent
  107. --------------------
  108.  
  109. link myapp+EMM501 ;
  110.  
  111. NOTE: Depending on your linker and the version of Clipper, you may get a
  112. 'duplicate definition' for the symbol '__e_avail' this is expected and
  113. you may safely ignore this warning.
  114.  
  115. Problems
  116. --------
  117.  
  118. This fix should cause no new problems. If you still have an unexplained
  119. problem after linking it, please check that you have not linked it as
  120. the first OBJ. If you still have a problem, it is most *unlikely* to be
  121. due to this fix.
  122.  
  123. NOTE: Under no circumstances should you contact Computer Associates
  124. International, Blink Inc, or ASM Inc, regarding problems with this
  125. replacement module - they will not be able to help you.
  126.  
  127. If there are bona-fide problems with this module I would like to hear
  128. about them and will correct them if possible, but please understand that
  129. I make no commitment to do so. I can be contacted at the CIS ID listed
  130. below.
  131.  
  132. Technical Notes
  133. ---------------
  134.  
  135. For those who are interested...
  136.  
  137. In order to use EMS memory, Clipper requires an EMS driver supporting
  138. EMS 3.2 or better, and that the driver provide a 64K pageframe.
  139.  
  140. One of the standard ways of checking for the presence of an EMS driver
  141. is to look for a particular signature at a particular memory location.
  142. Under normal circumstances, that signature is 'EMMXXXX0'.
  143.  
  144. Unfortunately versions of Clipper prior to 5.2 do not properly check for
  145. this signature, instead they look for just 'EMM' which under normal
  146. circumstances works ok. However, more recent EMS emulators, such as
  147. QEMM, EMM386 and 386MAX are capable of providing EMS services without
  148. the need for a pageframe through the use of a driver switch (such as
  149. FRAME=NONE, or NOEMS with DOS 6's EMM386). To indicate that full EMS
  150. services are not available, some of these drivers (but not all) change
  151. the driver signature to 'EMMQXXX0', so that software checking for
  152. 'EMMXXXX0' will not find a match, and disable their EMS use.
  153. Unfortunately, as Clipper only checks for the 'EMM' portion of the
  154. signature, it does not realise that full EMS services are not available.
  155.  
  156. This problem is further compounded by another problem - detection that
  157. the pageframe is not present. After checking the driver is present by
  158. matching signatures, Clipper asks the driver for the address of the
  159. pageframe. In the case that the pageframe is not present, the driver
  160. returns an error code to Clipper, but Clipper ignores this error code,
  161. and takes a 'random' value for the pageframe address, which will
  162. coincidentally be in low memory. As soon as the VM system needs to page
  163. some data out to EMS, it will write to this address, overwriting
  164. whatever is there (DOS, device drivers or the interrupt vector table).
  165. This will usually cause an immediate lockup (or an exception error), and
  166. explains why a Clipper 5.x program can run for a short while before the
  167. problem is apparent.
  168.  
  169. EMM501.OBJ ensures that the signature is matched correctly, and also
  170. that Clipper will not attempt to use EMS when the pageframe is not
  171. present.
  172.  
  173. Malcolm Shedden
  174. ASM Inc.
  175. CIS: 76030,1031.
  176.  
  177.  
  178. History
  179. -------
  180.  
  181. 4/20/1993   V1.0 released.
  182. 5/11/1993   V1.01 the only change is that source code is now included.
  183.  
  184.  
  185.  
  186.                -= This file was brought to you via CLN -=
  187.  
  188.                                  ±max
  189.