607 lines
13 KiB
HTML
607 lines
13 KiB
HTML
<!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
|
|
> |