os/dos/cwsdpmi.txt
changeset 10385 4f9838649c7f
equal deleted inserted replaced
10384:6b408b83ac34 10385:4f9838649c7f
       
     1 CWSDPMI is Copyright (C) 1995-2000  Charles W Sandmann (sandmann@clio.rice.edu)
       
     2                                     1206 Braelinn, Sugar Land, TX 77479
       
     3 
       
     4 This is release 5.  The files in this binary distribution may be redistributed
       
     5 under the GPL (with source) or without the source code provided:
       
     6 
       
     7 * CWSDPMI.EXE or CWSDPR0.EXE are not modified in any way except via CWSPARAM.
       
     8 
       
     9 * CWSDSTUB.EXE internal contents are not modified in any way except via
       
    10   CWSPARAM or STUBEDIT.  It may have a COFF image plus data appended to it.
       
    11 
       
    12 * Notice to users that they have the right to receive the source code and/or
       
    13   binary updates for CWSDPMI.  Distributors should indicate a site for the
       
    14   source in their documentation.
       
    15 
       
    16 -------------------------------------------------------------------------------
       
    17 
       
    18 CWSDPMI was written to provide DPMI services for V2 of DJGPP.  It currently
       
    19 does not support 16-bit DPMI applications, or DPMI applications requiring a
       
    20 built in extender.  It does support virtual memory and hardware interrupt
       
    21 reflection from real mode to protected mode.  DJGPP V1.1x and RSX applications
       
    22 will also run using this server, which can be used to provide enhanced control
       
    23 over hardware interrupts.  Some DPMI 1.0 extensions (0x506, 0x507, 0x508) have
       
    24 been implemented.
       
    25 
       
    26 CWSDPR0.EXE is an alternate version which runs at ring 0 with virtual memory
       
    27 disabled.  It may be used if access to ring-0 features are desired.  It
       
    28 currently does not switch stacks on HW interrupts, so some DJGPP features
       
    29 such as SIGINT and SIGFPE are not supported and will generate a double fault
       
    30 or stack fault error (to be fixed someday).
       
    31 
       
    32 CWSDSTUB.EXE is a stub loader image for DJGPP which includes CWSDPMI.  This
       
    33 allows single executable image distributions.  You can use the EXE2COFF
       
    34 program and COPY /B CWSDSTUB.EXE+yourimage yourimage.exe to create a
       
    35 standalone executable image.
       
    36 
       
    37 Some of the internal tuning and configuration parameters may be modified
       
    38 in the image using CWSPARAM.EXE (see CWSPARAM.DOC).
       
    39 
       
    40 If you want to use CWSDPMI with DJGPP, you expand the distribution into the
       
    41 DJGPP directory tree.  CWSDPMI.EXE will be put in the BIN directory with your
       
    42 DJGPP images and it will automatically be loaded when they run.
       
    43 
       
    44 Directions for use (server can be used in either of two different ways):
       
    45 
       
    46 1) "cwsdpmi" alone with no parameters will terminate and stay resident
       
    47    FOR A SINGLE DPMI PROCESS.  This means it unloads itself when your
       
    48    DPMI application exits.  This mode is useful in software which needs
       
    49    DPMI services, since CWSDPMI can be exec'ed and then will unload on exit.
       
    50 
       
    51 2) "cwsdpmi -p" will terminate and stay resident until you remove it.
       
    52    It can be loaded into UMBs with LH.  "cwsdpmi -u" will unload the TSR.
       
    53 
       
    54 3) The file used for virtual memory swapping, if desired, is controlled
       
    55    by the "-sc:\cwsdpmi.swp" syntax on the command line.  You must specify
       
    56    either a file with full disk/directory syntax, or "-s-" which disables
       
    57    virtual memory.
       
    58 
       
    59 4) The default swap file name is c:\cwsdpmi.swp, but this can be changed
       
    60    with the CWSPARAM image, as can some other parameters.
       
    61 
       
    62 5) You can disable the DPMI 1.0 extensions by starting the image with the
       
    63    "cwsdpmi -x" syntax.  This feature allows you to run programs developed
       
    64    under other DPMI providers which do not behave properly with these
       
    65    extensions enabled (typically use of NULL pointers).
       
    66 
       
    67 I would like to give special thanks to DJ Delorie who wrote the original
       
    68 GO32 code on which CWSDPMI is based.  Morten Welinder also provided and
       
    69 improved much of the code in this program.
       
    70 
       
    71 -------------------------------------------------------------------------------
       
    72 
       
    73 This section contains a list of the error messages you might see out of
       
    74 CWSDPMI and some details on what they mean.
       
    75 
       
    76 Exceptions are only handled by CWSDPMI if the application does not establish
       
    77 an exception handler, exceptions nest 5 deep, or the error is particularly bad:
       
    78 
       
    79 "Page fault" -
       
    80   1) an illegal page fault happens in a RMCB or HW interrupt, (lock all pages!)
       
    81   2) all available pages have been locked,
       
    82   3) the application is using non-committed pages for null pointer protection.
       
    83 "Double Fault" - multiple exceptions occurred
       
    84 "Invalid TSS" - typically due to RMCB or HW interrupt being called after the
       
    85    selectors/memory have been deallocated (remember to reset the mouse)
       
    86 "General Protection Fault" - bad parameter sent to a DPMI call
       
    87 
       
    88 "80386 required."
       
    89 
       
    90 Since 80286 and lesser processors don't have the hardware necessary to
       
    91 run CWSDPMI.  No workaround, upgrade.
       
    92 
       
    93 "DOS 3 required."
       
    94 
       
    95 A few interrupts are used which need DOS 3.0 or higher.  I don't expect to
       
    96 ever see this message, since 80386 machines were introduced after DOS 3.0
       
    97 and that check is made first.
       
    98 
       
    99 "CWSDPMI V0.90+ (r5) Copyright (C) 2000 CW Sandmann  ABSOLUTELY NO WARRANTY"
       
   100 
       
   101 An informational message displayed if the program is not run in one-pass mode.
       
   102 
       
   103 "Protected mode not accessible."
       
   104 
       
   105 This message should only be displayed if running CWSDPMI in a protected
       
   106 environment with no access to protected mode.  In this case, DPMI should
       
   107 already be available and CWSDPMI would not be needed.  This might happen if
       
   108 a 16-bit DPMI client is loaded and a DJGPP image attempts to load CWSDPMI
       
   109 to provide 32-bit DPMI services under Windows.
       
   110 
       
   111 "Warning: cannot open swap file c:\cwsdpmi.swp"
       
   112 
       
   113 Maybe you are out of file handles, or the swap file name is incorrectly
       
   114 specified in the image (change the name with cwsparam).
       
   115 
       
   116 "No swap space!"
       
   117 
       
   118 This message means you tried to use more paging file than CWSDPMI was
       
   119 configured to handle.  Since this is protected against in the memory
       
   120 allocation code, you should never see this message.
       
   121 
       
   122 "Swap disk full!"
       
   123 
       
   124 This means the paging file could not be expanded when trying to page
       
   125 memory out to disk.  This would normally not be seen, unless you are
       
   126 writing output to the same disk which holds the paging file.  Decrease
       
   127 the amount of memory your DPMI application is using or free up disk space.
       
   128 
       
   129 "Interrupt 0x??"
       
   130 
       
   131 Your application tried to call an interrupt from protected mode which
       
   132 normally shouldn't be called (something like a data pointer).  If the
       
   133 request was allowed to continue it would likely hang your machine.  If you
       
   134 see this message and think the interrupt should be allowed to continue, let
       
   135 me know.
       
   136 
       
   137 "Error: Using XMS switched CPU into V86 mode."
       
   138 
       
   139 This message might be seen if you have your memory manager in AUTO mode.  The
       
   140 only workaround in this case is to stop using AUTO mode.
       
   141 
       
   142 "Error: could not allocate page table memory"
       
   143 
       
   144 The page table memory (a minimum of 16Kb) is allocated from conventional
       
   145 memory (either in the 640Kb region or UMBs).  If CWSDPMI cannot allocate the
       
   146 minimum necessary memory, you would see this message.  Free up some
       
   147 conventional memory.  You may also see this message if a page directory needs
       
   148 to be faulted in, and there are no available pages.  This means too many pages
       
   149 have been locked for the allocated page tables available.  While CWSDPMI
       
   150 tries to dynamically allocate these if needed, this effort failed.  You need
       
   151 to increase the number of page tables with CWSPARAM, or increase the amount
       
   152 of free conventional memory if it is low.  If the application which calls
       
   153 CWSDPMI internally manages all the DOS memory, the page tables may need to
       
   154 be pre-allocated at DPMI startup time (if this is needed, try using the
       
   155 run option flag 2 in cwsparam).
       
   156 
       
   157 "16-bit DPMI unsupported."
       
   158 
       
   159 CWSDPMI is a 32-bit only DPMI server.  Ideally, on the request to enter DPMI's
       
   160 PM with a 16-bit request, we would just fail the call setting the carry bit
       
   161 like the DPMI specification describes.  Some buggy 16-bit compiler tools don't
       
   162 check the return status and will hang the machine in this case.  So, I issue
       
   163 an error message and exit the image instead.
       
   164 
       
   165 "Descriptors exhausted."
       
   166 
       
   167 An attempt to nest a DPMI client failed in the setup phase due to insufficient
       
   168 free selectors in the LDT.
       
   169 
       
   170 "CWSDPMI not removed"
       
   171 
       
   172 When the -u parameter is specified, if DPMI is not detected this message is
       
   173 printed.  Informational.