New upstream version 2.0pre9.2
This commit is contained in:
607
doc/EMUfailure.html
Normal file
607
doc/EMUfailure.html
Normal file
@@ -0,0 +1,607 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<HTML
|
||||
><HEAD
|
||||
><TITLE
|
||||
>Known dosemu problems</TITLE
|
||||
><META
|
||||
NAME="GENERATOR"
|
||||
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"></HEAD
|
||||
><BODY
|
||||
CLASS="ARTICLE"
|
||||
BGCOLOR="#FFFFFF"
|
||||
TEXT="#000000"
|
||||
LINK="#0000FF"
|
||||
VLINK="#840084"
|
||||
ALINK="#0000FF"
|
||||
><DIV
|
||||
CLASS="ARTICLE"
|
||||
><DIV
|
||||
CLASS="TITLEPAGE"
|
||||
><H1
|
||||
CLASS="TITLE"
|
||||
><A
|
||||
NAME="AEN2"
|
||||
>Known dosemu problems</A
|
||||
></H1
|
||||
><DIV
|
||||
><DIV
|
||||
CLASS="ABSTRACT"
|
||||
><P
|
||||
></P
|
||||
><A
|
||||
NAME="AEN4"
|
||||
></A
|
||||
><P
|
||||
>This file lists programs and groups of programs not running or running
|
||||
only partially under dosemu. The most up-to-date version of this file
|
||||
may be found on:
|
||||
<SPAN
|
||||
CLASS="emphasis"
|
||||
><I
|
||||
CLASS="EMPHASIS"
|
||||
><A
|
||||
HREF="http://www.dosemu.org/"
|
||||
TARGET="_top"
|
||||
>http://www.dosemu.org/</A
|
||||
></I
|
||||
></SPAN
|
||||
>.
|
||||
Please report about possible additions to
|
||||
<SPAN
|
||||
CLASS="emphasis"
|
||||
><I
|
||||
CLASS="EMPHASIS"
|
||||
><A
|
||||
HREF="mailto:linux-msdos@vger.kernel.org"
|
||||
TARGET="_top"
|
||||
>linux-msdos@vger.kernel.org</A
|
||||
></I
|
||||
></SPAN
|
||||
>
|
||||
or the SourceForge BTS at
|
||||
<SPAN
|
||||
CLASS="emphasis"
|
||||
><I
|
||||
CLASS="EMPHASIS"
|
||||
><A
|
||||
HREF="http://www.dosemu.org/"
|
||||
TARGET="_top"
|
||||
>http://www.dosemu.org/</A
|
||||
></I
|
||||
></SPAN
|
||||
>.
|
||||
Perhaps your program can be made going
|
||||
with the help of others. Have a look at the dosemu-howto how to do so.</P
|
||||
><P
|
||||
></P
|
||||
></DIV
|
||||
></DIV
|
||||
><HR></DIV
|
||||
><DIV
|
||||
CLASS="TOC"
|
||||
><DL
|
||||
><DT
|
||||
><B
|
||||
>Table of Contents</B
|
||||
></DT
|
||||
><DT
|
||||
>1. <A
|
||||
HREF="#AEN12"
|
||||
>Fundamental problems</A
|
||||
></DT
|
||||
><DD
|
||||
><DL
|
||||
><DT
|
||||
>1.1. <A
|
||||
HREF="#AEN15"
|
||||
>Virtual Control Program Interface (VCPI)</A
|
||||
></DT
|
||||
><DT
|
||||
>1.2. <A
|
||||
HREF="#AEN19"
|
||||
>Programs using older versions of the Pharlap Extender</A
|
||||
></DT
|
||||
><DT
|
||||
>1.3. <A
|
||||
HREF="#AEN24"
|
||||
>Programs using the JEMM memory manager</A
|
||||
></DT
|
||||
><DT
|
||||
>1.4. <A
|
||||
HREF="#AEN28"
|
||||
>Does my failing program belong to these groups?</A
|
||||
></DT
|
||||
><DT
|
||||
>1.5. <A
|
||||
HREF="#AEN32"
|
||||
>Fundamental problem with the Linux kernel</A
|
||||
></DT
|
||||
><DT
|
||||
>1.6. <A
|
||||
HREF="#AEN40"
|
||||
>Fundamental problems with the CPU</A
|
||||
></DT
|
||||
><DD
|
||||
><DL
|
||||
><DT
|
||||
>1.6.1. <A
|
||||
HREF="#AEN43"
|
||||
>Problem with the virtualization of the IF flag</A
|
||||
></DT
|
||||
><DT
|
||||
>1.6.2. <A
|
||||
HREF="#AEN52"
|
||||
>ESP register corruption</A
|
||||
></DT
|
||||
></DL
|
||||
></DD
|
||||
></DL
|
||||
></DD
|
||||
><DT
|
||||
>2. <A
|
||||
HREF="#AEN69"
|
||||
>Known bugs</A
|
||||
></DT
|
||||
><DD
|
||||
><DL
|
||||
><DT
|
||||
>2.1. <A
|
||||
HREF="#AEN71"
|
||||
>Things YOU may help changing</A
|
||||
></DT
|
||||
><DD
|
||||
><DL
|
||||
><DT
|
||||
>2.1.1. <A
|
||||
HREF="#AEN73"
|
||||
>List of currently known bugs in dosemu2</A
|
||||
></DT
|
||||
></DL
|
||||
></DD
|
||||
></DL
|
||||
></DD
|
||||
><DT
|
||||
>3. <A
|
||||
HREF="#AEN84"
|
||||
>Programs exhibiting graphical problems in xdosemu</A
|
||||
></DT
|
||||
><DD
|
||||
><DL
|
||||
><DT
|
||||
>3.1. <A
|
||||
HREF="#AEN87"
|
||||
>Games with graphical problems</A
|
||||
></DT
|
||||
></DL
|
||||
></DD
|
||||
><DT
|
||||
>4. <A
|
||||
HREF="#AEN95"
|
||||
>Differences in behaviour between Dosemu and Dosemu2</A
|
||||
></DT
|
||||
><DD
|
||||
><DL
|
||||
><DT
|
||||
>4.1. <A
|
||||
HREF="#AEN98"
|
||||
>Filesystems</A
|
||||
></DT
|
||||
><DD
|
||||
><DL
|
||||
><DT
|
||||
>4.1.1. <A
|
||||
HREF="#AEN100"
|
||||
>MFS</A
|
||||
></DT
|
||||
></DL
|
||||
></DD
|
||||
></DL
|
||||
></DD
|
||||
></DL
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="SECT1"
|
||||
><H2
|
||||
CLASS="SECT1"
|
||||
><A
|
||||
NAME="AEN12"
|
||||
>1. Fundamental problems</A
|
||||
></H2
|
||||
><P
|
||||
>Programs that don't work under the MSDOS Emulator and probably won't
|
||||
ever work, because of fundamental problems. Some of these fundamental
|
||||
problems result in these programs not being runnable on
|
||||
Win3.x/Win95/WinNT and under OS/2 DOS box either. These programs
|
||||
are characterized by using any of these features:</P
|
||||
><DIV
|
||||
CLASS="SECT2"
|
||||
><HR><H3
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="AEN15"
|
||||
>1.1. Virtual Control Program Interface (VCPI)</A
|
||||
></H3
|
||||
><P
|
||||
>VCPI allows programs to run in ring 0. This is kernel mode in Linux
|
||||
and not sensible.</P
|
||||
><P
|
||||
>Example: sim2181.exe from Analog Devices DSP Kit</P
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="SECT2"
|
||||
><HR><H3
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="AEN19"
|
||||
>1.2. Programs using older versions of the Pharlap Extender</A
|
||||
></H3
|
||||
><P
|
||||
>Older versions of the Pharlap Extender (run286) need ring-0 access
|
||||
under DOSEMU to install their own DPMI server. The use of proprietary
|
||||
undocumented extensions to the DPMI protocol makes DOSEMU's DPMI server
|
||||
unsuitable for this extender.</P
|
||||
><P
|
||||
>Example: Autocad Version 12c1 For DOS</P
|
||||
><P
|
||||
>Example: the game BioForge by Origin Systems.</P
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="SECT2"
|
||||
><HR><H3
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="AEN24"
|
||||
>1.3. Programs using the JEMM memory manager</A
|
||||
></H3
|
||||
><P
|
||||
>The JEMM memory manager provides proprietary extensions to the EMS
|
||||
protocol. These are not supported by DOSEMU.</P
|
||||
><P
|
||||
>Example: Wing Commander Privateer by Origin Systems</P
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="SECT2"
|
||||
><HR><H3
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="AEN28"
|
||||
>1.4. Does my failing program belong to these groups?</A
|
||||
></H3
|
||||
><P
|
||||
>Check with "strings <program.exe> | less" if the program
|
||||
contains some of these keywords: <SPAN
|
||||
CLASS="emphasis"
|
||||
><I
|
||||
CLASS="EMPHASIS"
|
||||
> vcpi, RUN286</I
|
||||
></SPAN
|
||||
>.</P
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="SECT2"
|
||||
><HR><H3
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="AEN32"
|
||||
>1.5. Fundamental problem with the Linux kernel</A
|
||||
></H3
|
||||
><P
|
||||
>The Programmable Interval Timer (PIT) can be programmed to produce
|
||||
interrupts with frequencies up to almost 2MHz. Linux sets this to
|
||||
only 100Hz (2.6 kernels can set it to 1KHz) and doesn't allow the
|
||||
software to change that. This limits the minimal interval between subsequent
|
||||
SIGALRM notifications for software that uses the setitimer(2) syscall.
|
||||
To emulate the PIT frequencies that are higher than the frequency Linux
|
||||
sets the PIT to, dosemu uses "interrupt bursts": on every SIGALRM
|
||||
reception dosemu triggers the timer interrupt as many times as necessary
|
||||
to compensate the gap since the previous SIGALRM reception. This allows
|
||||
to keep a precise timing but causes problems for some programs. When
|
||||
the timer interrupt handler is invoked more than once without letting
|
||||
the main thread to execute, some programs can lock up. The game "Cosmo" is
|
||||
one of those.</P
|
||||
><P
|
||||
>Another problem is that due to the aforementioned low timer frequency
|
||||
dosemu is not able to properly emulate the timings for different
|
||||
emulated hardware. That also causes problems for some programs.
|
||||
Scream Tracker 3, for example, can lock up at startup because the
|
||||
interrupt from an emulated SB card can be triggered earlier than it
|
||||
should be in a real system.</P
|
||||
><P
|
||||
>Possibly a workaround may be found in future DOSEMU versions.</P
|
||||
><P
|
||||
>Linux kernels prior to 3.16 may have various problems on x86-64.
|
||||
Make sure to not use 3.14 and 3.15 as they
|
||||
<A
|
||||
HREF="https://www.codeweavers.com/support/wiki/Diag/BrokenLDT16"
|
||||
TARGET="_top"
|
||||
>lack 16bit segments support</A
|
||||
></P
|
||||
><P
|
||||
>3.16 adds support for espfix64 feature.</P
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="SECT2"
|
||||
><HR><H3
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="AEN40"
|
||||
>1.6. Fundamental problems with the CPU</A
|
||||
></H3
|
||||
><P
|
||||
>There are several defects in Intel's x86 CPUs that are causing
|
||||
problems for some software. Below is a description of the defects
|
||||
that are known to cause problems for software running under dosemu.</P
|
||||
><DIV
|
||||
CLASS="SECT3"
|
||||
><HR><H4
|
||||
CLASS="SECT3"
|
||||
><A
|
||||
NAME="AEN43"
|
||||
>1.6.1. Problem with the virtualization of the IF flag</A
|
||||
></H4
|
||||
><P
|
||||
><A
|
||||
HREF="http://www.intel.com/design/intarch/techinfo/pentium/inout.htm"
|
||||
TARGET="_top"
|
||||
>Intel's manual</A
|
||||
>
|
||||
says:</P
|
||||
><P
|
||||
>" A procedure may use the POPF instruction to change the setting of the IF
|
||||
flag only if the CPL is less than or equal to the current IOPL. An attempt
|
||||
by a less privileged procedure to change the IF flag does not result in
|
||||
an exception; the IF flag simply remains unchanged. "</P
|
||||
><P
|
||||
>The fact that the exception is not being generated, prevents dosemu from
|
||||
catching and properly simulating the POPF instruction executed in protected
|
||||
mode. That, in particular, means that the following code, executed in
|
||||
protected mode (not in v86 mode) under dosemu, will end up with interrupts
|
||||
disabled (IF cleared):</P
|
||||
><P
|
||||
><TABLE
|
||||
BORDER="0"
|
||||
BGCOLOR="#E0E0E0"
|
||||
WIDTH="100%"
|
||||
><TR
|
||||
><TD
|
||||
><PRE
|
||||
CLASS="SCREEN"
|
||||
> sti
|
||||
pushf
|
||||
cli
|
||||
popf</PRE
|
||||
></TD
|
||||
></TR
|
||||
></TABLE
|
||||
>
|
||||
[ the interrupts are still disabled here ]</P
|
||||
><P
|
||||
>This bug can only affect DPMI programs, as using DPMI is the only way
|
||||
to execute protected mode code under dosemu.
|
||||
Known programs that are affected are the games from ID software, namely
|
||||
Doom2 and Duke Nukem 3D, but only when configured with sound.
|
||||
An optional work-around was added to dosemu, which just re-enables the
|
||||
interrupts if they were disabled for too long in protected mode.
|
||||
Additionally the address of the instruction that disabled the interrupts,
|
||||
is added to a black-list and this instruction is ignored for subsequent
|
||||
passes so that it can't disable the interrupts any more.
|
||||
This is potentially unsafe, but if the timeout is long enough, no harm
|
||||
was observed so far.
|
||||
The timeout is configured via the $_cli_timeout option, which is measured
|
||||
in a 10ms timer ticks. Setting that option to 0 disables the workaround
|
||||
completely, making Doom2 unplayable with sound enabled.</P
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="SECT3"
|
||||
><HR><H4
|
||||
CLASS="SECT3"
|
||||
><A
|
||||
NAME="AEN52"
|
||||
>1.6.2. ESP register corruption</A
|
||||
></H4
|
||||
><P
|
||||
>Intel's x86 CPUs have a defect
|
||||
<A
|
||||
HREF="http://www.intel.com/design/intarch/specupdt/27287402.PDF"
|
||||
TARGET="_top"
|
||||
>described here</A
|
||||
>,
|
||||
chapter "Specification Clarifications"
|
||||
section 4: "Use Of ESP In 16-Bit Code With 32-Bit Interrupt Handlers",
|
||||
which reads as follows:</P
|
||||
><P
|
||||
>"ISSUE: When a 32-bit IRET is used to return to another privilege level,
|
||||
and the old level uses a 4G stack (D/B bit in the segment register = 1),
|
||||
while the new level uses a 64k stack (D/B bit = 0), then only the
|
||||
lower word of ESP is updated. The upper word remains unchanged. This is
|
||||
fine for pure 16-bit code, as well as pure 32-bit code. However, when
|
||||
32-bit interrupt handlers are present, 16-bit code should avoid any
|
||||
dependence on the upper word of ESP. No changes are necessary in existing
|
||||
16-bit code, since the only way to access ESP in USE16 segments is
|
||||
through the 32-bit address size prefix."</P
|
||||
><P
|
||||
>Unfortunately, the above quote from Intel is silent about the 32-bit
|
||||
programs that use 16-bit stack segment - this is where the problem pops us.
|
||||
The corruption happens when the Linux kernel returns control to the dosemu
|
||||
process, while a 32-bit DPMI client that uses a 16-bit data segment for
|
||||
the stack is active. This is not the usual case, but unfortunately some
|
||||
32-bit DPMI clients are actually using a 16-bit segment for the stack,
|
||||
and even the dos4gw extender behaves that way sometimes.</P
|
||||
><P
|
||||
>Programs that are known to be affected by this issue are:
|
||||
<P
|
||||
></P
|
||||
><UL
|
||||
><LI
|
||||
><P
|
||||
>Need For Speed 1 (demo version at least, when configured with sound)</P
|
||||
></LI
|
||||
><LI
|
||||
><P
|
||||
>Syndicate Wars (when used with dos4gw 0.8)</P
|
||||
></LI
|
||||
><LI
|
||||
><P
|
||||
>Open Cubic Player</P
|
||||
></LI
|
||||
></UL
|
||||
></P
|
||||
><P
|
||||
>These programs are crashing shortly after startup, but this problem
|
||||
is difficult to detect reliably, so there may be many more programs
|
||||
that experience a random crashes due to this CPU bug.</P
|
||||
><P
|
||||
>The reliable work-around was developed and added into linux-2.6.12
|
||||
for 32-bit systems, and into linux-3.16 for 64-bit systems.</P
|
||||
><P
|
||||
>Note: linux kernels prior to 3.16 may have various problems on x86-64.</P
|
||||
></DIV
|
||||
></DIV
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="SECT1"
|
||||
><HR><H2
|
||||
CLASS="SECT1"
|
||||
><A
|
||||
NAME="AEN69"
|
||||
>2. Known bugs</A
|
||||
></H2
|
||||
><DIV
|
||||
CLASS="SECT2"
|
||||
><H3
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="AEN71"
|
||||
>2.1. Things YOU may help changing</A
|
||||
></H3
|
||||
><DIV
|
||||
CLASS="SECT3"
|
||||
><H4
|
||||
CLASS="SECT3"
|
||||
><A
|
||||
NAME="AEN73"
|
||||
>2.1.1. List of currently known bugs in dosemu2</A
|
||||
></H4
|
||||
><P
|
||||
></P
|
||||
><UL
|
||||
><LI
|
||||
><P
|
||||
>Some documentation is known to be well out of date. </P
|
||||
></LI
|
||||
><LI
|
||||
><P
|
||||
>Some database programs (Clipper, FoxPro) have problems with
|
||||
locking in certain configurations. smbfs doesn't support
|
||||
locking. $_full_file_locks=(on) may or may not help.</P
|
||||
></LI
|
||||
><LI
|
||||
><P
|
||||
>Mortal Kombat 1 and 2 are not producing any sound for unknown reasons.</P
|
||||
></LI
|
||||
><LI
|
||||
><P
|
||||
>X-COM Apocalypse (DEMO version) locks up at startup if configured with sound.</P
|
||||
></LI
|
||||
></UL
|
||||
></DIV
|
||||
></DIV
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="SECT1"
|
||||
><HR><H2
|
||||
CLASS="SECT1"
|
||||
><A
|
||||
NAME="AEN84"
|
||||
>3. Programs exhibiting graphical problems in xdosemu</A
|
||||
></H2
|
||||
><P
|
||||
>The following programs work perfectly on the Linux console
|
||||
(suid/sudo/root) with graphics enabled but exhibit minor or
|
||||
major glitches in xdosemu.</P
|
||||
><DIV
|
||||
CLASS="SECT2"
|
||||
><HR><H3
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="AEN87"
|
||||
>3.1. Games with graphical problems</A
|
||||
></H3
|
||||
><P
|
||||
>The following games exhibit glitches or don't work at all in
|
||||
xdosemu. Please let us know when any problems are solved or
|
||||
even better, help us solving!</P
|
||||
><P
|
||||
></P
|
||||
><UL
|
||||
><LI
|
||||
><P
|
||||
>Commander Keen 1 wobbles like jelly and the window shakes
|
||||
every time it scrolls.</P
|
||||
></LI
|
||||
><LI
|
||||
><P
|
||||
>Pinball Dreams 2 takes a long time to start. Once it's past
|
||||
the startup screen it runs fine though.</P
|
||||
></LI
|
||||
></UL
|
||||
></DIV
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="SECT1"
|
||||
><HR><H2
|
||||
CLASS="SECT1"
|
||||
><A
|
||||
NAME="AEN95"
|
||||
>4. Differences in behaviour between Dosemu and Dosemu2</A
|
||||
></H2
|
||||
><P
|
||||
>The following differences may be apparent if you have previously been
|
||||
using Dosemu.</P
|
||||
><DIV
|
||||
CLASS="SECT2"
|
||||
><HR><H3
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="AEN98"
|
||||
>4.1. Filesystems</A
|
||||
></H3
|
||||
><DIV
|
||||
CLASS="SECT3"
|
||||
><H4
|
||||
CLASS="SECT3"
|
||||
><A
|
||||
NAME="AEN100"
|
||||
>4.1.1. MFS</A
|
||||
></H4
|
||||
><P
|
||||
>Network device DOS filesystem that provides read write access to the host filesystem.</P
|
||||
><P
|
||||
></P
|
||||
><UL
|
||||
><LI
|
||||
><P
|
||||
>Dosemu2 does not redirect a drive to arbitrary host paths on the command
|
||||
line of the emufs.sys driver when it is loaded in config.sys. Use the lredir2
|
||||
command to accomplish this in autoexec.bat instead.</P
|
||||
></LI
|
||||
><LI
|
||||
><P
|
||||
>Dosemu2 does not support LFN on the SUBST / JOIN drives.</P
|
||||
></LI
|
||||
><LI
|
||||
><P
|
||||
>Dosemu2 now provides enhanced FAT32 disk functions only as a fallback
|
||||
to the native DOS in the event that the DOS does not implement them itself.
|
||||
A consequence of being a fallback is that if the DOS has a bug in its
|
||||
implementation it is not overriden by Dosemu2. Examples of this are
|
||||
MS-DOS 7.0 and PC-DOS 7.10.</P
|
||||
></LI
|
||||
></UL
|
||||
></DIV
|
||||
></DIV
|
||||
></DIV
|
||||
></DIV
|
||||
></BODY
|
||||
></HTML
|
||||
>
|
||||
Reference in New Issue
Block a user