        Quarterdeck Technical Note

        Patching QEMM-386 5.10 and 5.11 to allow Windows
        3.00A (date 10-31-90) to run in standard mode

   Background: Windows 3, in both its standard and
              enhanced modes, puts the machine into protected
              mode without using the VCPI (Virtual Control
              Program Interface) specification, which is intended
              to allow applications to go into protected mode
              when a protected-mode memory manager is already
              present.  Normally this would make it impossible to
              run Windows standard and enhanced modes with QEMM-
              386 active.  Microsoft and Quarterdeck have
              collaborated on an enhanced-mode solution that
              allows a peaceful transfer of expanded memory
              management duties from QEMM-386 to Windows enhanced
              mode and back again.  However, this solution makes
              use of a Windows interface that exists only for
              enhanced mode, not for standard mode.  In order to
              extend its support for Windows 3.00 so that
              standard mode can be run under QEMM-386's
              management as well as real and enhanced mode, QEMM-
              386 patches the Windows file DOSX.EXE in memory to
              make Windows in standard mode behave like a VCPI
              client.  This solution works well for the version
              of Windows in existence at the time of the release
              of QEMM-386 version 5.10 and 5.11.  But the method
              of patching that QEMM-386 5.10 and 5.11 use is
              specific to the first release of Windows (dated 5-1-
              90); it depends on specific bytes of code being at
              specific offsets in the DOSX.EXE file.

                Windows 3.00A (identified on the outside of some
              packages as Windows 3.00 with a series of 4 plus
              signs beneath the version), dated 10-31-90, was
              released almost two months after QEMM-386 5.11.
              Future versions of QEMM-386 will detect Windows
              3.00A and adjust the QEMM patching method to allow
              for the differences between Windows versions.
              However, QEMM-386 5.10 and 5.11, in the versions
              that are shipped, will detect that the version of
              DOSX.EXE is not the one that QEMM-386 is familiar
              with, and will tell Windows standard mode not to
              start up, to prevent an exception error from the
              386 processor. The symptom is that Windows puts up
              its first graphics screen, then returns the system
              to the DOS prompt, which appears on top of the
              Windows 3.0 logo.  The video card remains in
              graphics mode.

                Quarterdeck customers who contact us about this
              problem can receive a new QEMM-386 disk that
              addresses the problem - when a new version of QEMM-
              386 is released.  In the meantime, QEMM-386 can be
              patched to make it compatible with the new Windows
              standard mode program.  It is important to note
              that the following patch, while making QEMM-386
              compatible with the 10-31-90 Windows standard mode
              program, also makes QEMM-386 incompatible with the
              original 5-1-90 Windows standard mode program.
              Keep a separate copy of QEMM386.SYS available for
              each Windows version if you think you might be
              using both versions of Windows.

               The following procedure is intended to prevent
              Windows 3.00A returning the machine to the DOS
              prompt shortly after starting Windows in standard
              mode.
   -------------------------------------------------

   1) Make a copy of the QEMM386.SYS file in your
              QEMM directory.  We are about to alter your current
              copy of QEMM386.SYS; the copy you make will serve
              as a backup in case this operation fails.

                    COPY C:\QEMM\QEMM386.SYS C:\QEMM\QEMMOLD.SYS

   (If your QEMM386.SYS is not located in the QEMM
              directory of the C: drive, change the path
              accordingly.)

   2) Go to the DOS directory on the hard disk and
              type:

           DEBUG C:\QEMM\QEMM386.SYS

   (If your QEMM386.SYS is not located in the QEMM
              directory of the C: drive, change the path
              accordingly.)

   Hit the Enter key; you should the the DEBUG
              prompt, which is a hyphen.

   3) At the DEBUG prompt, type:

           S 100 L F000 B5 19

   Hit the Enter key; DEBUG should return two
              segment addresses and offsets:

           xxxx:yyyy
                  xxxx:zzzz

              (Both xxxx figures should be the same number.)

   4) At the DEBUG prompt again, use the segment
              addresses and offsets that were just returned to
              give the DEBUG commands, one at a time:

           E xxxx:yyyy D5
                  E xxxx:zzzz D5

     The addresses that DEBUG returned in step 3
              should be used in place of the addresses xxxx:yyyy
              and xxxx:zzzz, which we use as examples.  Hit the
              Enter key after each command; the DEBUG prompt
              should return in a moment.

   5) At the DEBUG prompt, type:

           S 100 L F000 CO 28

   Hit the Enter key; DEBUG should return a
              segment address and an offset:

           xxxx:yyyy

   6) At the DEBUG prompt again, use the segment
              address and offset that was just returned to give
              the DEBUG command:

           E xxxx:yyyy 20 29

     The address that DEBUG returned in step 5 should
              be used in place of the address xxxx:yyyy, which we
              use as an example.  Hit the Enter key; the DEBUG
              prompt should return in a moment.

   7) At the DEBUG prompt, type:

           S 100 L F000 C8 1A

   Hit the Enter key; DEBUG should return a
              segment address and an offset:

           xxxx:yyyy

   8) At the DEBUG prompt again, use the segment
              address and offset that was just returned to give
              the DEBUG command:

           E xxxx:yyyy E8

     The address that DEBUG returned in step 7 should
              be used in place of the address xxxx:yyyy, which we
              use as an example.  Hit the Enter key; the DEBUG
              prompt should return in a moment.

   9) At the DEBUG prompt, type

           W

   Hit the Enter key; DEBUG will announce that it is
              writing a certain number of bytes, then it will
              return the DEBUG prompt.

   10) At the DEBUG prompt, type

           Q

***END OF FILE***
