[comp.windows.ms] WIN.INI Switches for Windows 286 and 386

rogerson@PEDEV.Columbia.NCR.COM (Dale Rogerson) (02/23/90)

	Here is something that I believe everyone has been looking
	for.  I found it on GENIE in the Microsoft Users Group.	

	Help it is helpful.

	-----Dale
		Rogerson-----

=========================================================================

Windows/286 and /386 WIN.INI Switches:

[WIN386]

EmmSize = <KB Value>

     This is used to set the amount of Expanded Memory.  Leaving the value
     blank, will allocate as much available memory to expanded.

     Setting the value to 0 will disable the allocation of an EMS page
     frame.  This is useful for testing purposes, to discover if the
     problem you are experiencing is due to an EMS page frame conflict
     with devices using high memory locations.

WindowMemSize = <KB Value>

     WindowMemSize controls the size of the Windows virtual machine
     (VM1).  It can be thought of as the Memory Required PIF setting
     for VM1.  The default (and maximum) for this setting is 640.
     We recommend leaving this set to 640 in virtually all cases.

     For adjustments to the windowmemsize= setting in your win.ini
     to be effective, the emmsize= entry must be set to 0.

     If you want to set the windowmemsize= setting to a value other than
     640, you must set your emmsize= setting to 0. For example, if you 
     want to allocate 448 kilobytes for running Windows and Windows
     applications, put the following lines in your WIN.INI file:
          windowmemsize=448
          emmsize=0

     Page 25 in "Using Microsoft Windows/386" lists the minimum value for
     the windowmemsize= setting as 384. Generally this is true; however,
     if you have a large number of device drivers or a network installed
     on your system, this value cannot be set as low. If, when you start
     Windows/386, you receive the message "Not enough memory to run
     Windows", try setting windowmemsize= to higher values.


EMMPageFrame = <Address>

     This is set to the starting address where the 64K pageframe will
     begin.  It allocates a 64K contiguous EMS page frame beginning at
     the four-digit hexadecimal address specified; regardless of what
     other adapters may be using the range of memory.  Valid addresses
     begin at C000.


LastEMMSeg = <Address>

     This sets the last address win386 will examine with its automatic
     search to establish the 64K pageframe.  The default and maximum
     is address E000h.


VirtualHdIrq = 0 (Turn Off)
               1 (Default)

     This is used mainly for systems using a non-standard disk controller.
     With the default, the ROM routine which performs the disk access is
     bypassed to allow Windows/386 to perform its own handling of the
     disk.  By setting the VirtualHDIrq to 0, you allow the ROM routine
     to perform the access.  This is slower, but necessary in some cases
     where the disk controller and/or third-party disk partitioning
     software is incompatible with Windows/386' direct disk access.


New Windows/386 2.1 EMM Memory Switches:

There has been a problem on some configurations running WIN386 regarding
use of the memory from C000:0 to EFFF:F. WIN386 does a ROM RAM scan in this
area to try to find "holes" it can use for an EMS page frame. This causes
problems with some adaptors which don't like their memory getting "touched",
or with adaptors that only map the memory in when they are using it (i.e.
Token Ring adaptors), and leave it unmapped at other times.

There are now two WIN.INI entries for the [WIN386] section which will allow
the user to override the default action of WIN386 and force WIN386 to treat
a memory address range in a user specified way regardless of what may be
occupying that address range.


        emmexclude=<range>
        emminclude=<range>

        <range> is startseg-endseg where startseg and endseg are segment
        values in the range C000 - EFFF. This field is identical to the
        range given on the /X and /I switches for most EMM drivers.

To include or exclude multiple ranges, use multiple lines:

        emmexclude=<range1>
        emmexclude=<range2>
        emmexclude=<range3>

        emminclude=<range1>
        emminclude=<range2>
        emminclude=<range3>

EMMEXCLUDE specifies a range which is to be excluded from consideration for
use as an EMM page. This has the side effect of turning off the ROM RAM
search code for the range.

EMMINCLUDE specifies a range which is to be considered for use as an EMM page
regardless of what may be there.

NOTES on range:

        o Ranges specify addresses between C000 and EFFF. Segment values
                less than C000 are changed to C000. Segment values greater
                than EFFF are changed to EFFF.

                B800-F3FF is changed to become C000-EFFF

        o Ranges specify 16K pages, so the startseg is rounded DOWN to the
                nearest 16K page boundary, and the endseg is rounded UP to
                the nearest 16K page boundary - 1.

                D300-D4FF is rounded to become D000-D7FF

                The 16K boundaries are at:

                        C000
                        C400
                        C800
                        CC00
                        D000
                        D400
                        D800
                        DC00
                        E000
                        E400
                        E800
                        EC00
                        F000

        o endseg must be greater than startseg (after above noted adjustments).
                Ranges that do not satisfy this are ignored.

        o Ranges are INCLUSIVE. thus:

                C000-D000 is rounded to C000-D3FF.

                To stop at D000, the correct range specification is:

                C000-CFFF

General NOTES:


        o EMMINCLUDE must be used very carefully.

            o   Remember that you are specifying a range that will be
                considered for EMM use REGARDLESS of whether there is any
                ROM or RAM there.

            o   Remember also about the rounding to 16K boundaries that
                will be done on the range!

            o   Failure to consider things carefully will crash the system,
                or defeat the ability to use a particular adaptor under
                Windows/386.

        o EMMINCLUDE takes precedence over EMMEXCLUDE if you specify ranges
            which overlap. It is VERY STRONGLY recommended that you do not
            rely on overlapping range behavior as it may be changed in a
            future release.

        o EMMINCLUDE of a range does not guarantee that it will be used for
            EMM by WIN386. EMMEXCLUDE of a range does guarantee that it will
            not be used for EMM by WIN386.

        o The DEFAULT end of EMM consideration is not actually F000, it is
            E000. This is controled by the LASTEMMSEG win.ini entry. The
            default LASTEMMSEG value is 0E000. Users should be careful
            about putting in "LASTEMMSEG=0F000" because the behavior of the
            E000-F000 region is unpredictable on most machines.


EXAMPLE:

    [win386]
    ; Windows/386 will allocate the amount of memory specified in the
    ; windowmemsize entry to Windows.  The minimum memory that can be
    ; allocated is around 420, but this will vary depending upon whether
    ; or not you are running with a network, which version of DOS you
    ; are running with, and so on.  The emmsize entry fixes the MAXIMUM amount
    ; amount of extended memory that can be used as expanded memory at any
    ; one time.  Both your DOS applications and Windows itself will use this
    ; expanded memory.  You are probably best off leaving this entry blank,
    ; since Windows/386 will use a default value.
    windowmemsize=640
    emmsize=
    emmexclude=C400-C7FF
    emmexclude=D800-DFFF
    emminclude=D000-D7FF
    ;
    ; The AltEscape, AltEnter, and similar entries allow you to disable
    ; Windows/386's use of these special alt-key sequences.  Normally they
    ; should all be enabled (set to "on"), in which case these sequences are
    ; used by Windows/386 and are not seen by other applications.  If you need
    ; to run an application which relies on one of these sequences, you may
    ; set that entry to "off", then Windows/386 will ignore that key sequence,
    ; and it will be passed on to applications.
    altescape=on
    altenter=on
    altspace=on
    alttab=on
    altprintscn=on


Windows/286 EMS Line Control Switch

        Moveable EMS line

        The syntax is:

               win /l[+-]nnnn
        
        nnnn is the number of kb by which you want to
        move the line.  This number is currently limited
        to -16 <= nnnn <= +256.  In practice, raising the
        line by much above 100k usually drops you into
        small frame EMS.

        The /l flag is incompatible with the /n flag.
        Don't use both.

        The '+' in /l[+-]nnnn is in fact optional.

abukarb@prism.cs.orst.edu (Bassam A. Abu-Karroum) (02/24/90)

In article <2932@PEDEV.Columbia.NCR.COM> rogerson@PEDEV.Columbia.NCR.COM (Dale Rogerson) writes:
>
>EMMPageFrame = <Address>
>
>     This is set to the starting address where the 64K pageframe will
>     begin.  It allocates a 64K contiguous EMS page frame beginning at
>     the four-digit hexadecimal address specified; regardless of what
>     other adapters may be using the range of memory.  Valid addresses
>     begin at C000.
>     other adapters may be using the range of memory.  Valid addresses
>     begin at C000.
>
The above paragraph needs a little clarification. It is true that Windows/386
will set the pageframe at that address. However, if any other device or
adaptor is using the range, Windows File.About command will not report any
expanded memory. Also, to allocate the pageframe at the desired address you
need to precede the address with a zero. Yes, a zero on the left side. This is
the only WIN.INI switch that REQUIRES the zero. A sample line would be:

	emmpageframe=0D000

Without the leading zero, the above statement is useless.
Please note that all entries for the WIN.INI need to be in lower case.

(Unfortunately, not mentioning the leading zero was an error on Microsoft part)

Bassam

brent@well.sf.ca.us (Brent Southard) (02/26/90)

In article <16199@orstcs.CS.ORST.EDU> abukarb@prism.CS.ORST.EDU (Bassam A. Abu-Karroum) writes:
>...to precede the address with a zero. Yes, a zero on the left side. This is
>the only WIN.INI switch that REQUIRES the zero. A sample line would be:
>
>	emmpageframe=0D000
>
>Without the leading zero, the above statement is useless.
>Please note that all entries for the WIN.INI need to be in lower case.

While the bit about the leading zero is correct, the statement regarding
lowercase is wrong.  I routinely use the following statement:

	EMMPageFrame=0E000

By the way, this is the exact case in which Microsoft documents the switch.

Brent
-- 
brent southard  (313) 656-8349   |   usenet:  ...!well!brent
ImageTech Corp  (313) 362-3141   |   

"When frog licking is outlawed, only outlaws will lick frogs."