6096 lines
132 KiB
HTML
6096 lines
132 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<HTML
|
|
><HEAD
|
|
><TITLE
|
|
>DOSEMU</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"
|
|
>DOSEMU</A
|
|
></H1
|
|
><DIV
|
|
CLASS="AUTHORGROUP"
|
|
><A
|
|
NAME="AEN4"
|
|
></A
|
|
><H3
|
|
CLASS="CORPAUTHOR"
|
|
>The DOSEMU team</H3
|
|
><H4
|
|
CLASS="EDITEDBY"
|
|
>Edited by</H4
|
|
><H3
|
|
CLASS="EDITOR"
|
|
>Alistair MacDonald</H3
|
|
></DIV
|
|
><P
|
|
CLASS="PUBDATE"
|
|
>For DOSEMU v1.4 pl0.0<BR></P
|
|
><DIV
|
|
><DIV
|
|
CLASS="ABSTRACT"
|
|
><P
|
|
></P
|
|
><A
|
|
NAME="AEN12"
|
|
></A
|
|
><P
|
|
>This document is the amalgamation of a series of README files which were
|
|
created to deal with the lack of DOSEMU documentation.</P
|
|
><P
|
|
></P
|
|
></DIV
|
|
></DIV
|
|
><HR></DIV
|
|
><DIV
|
|
CLASS="TOC"
|
|
><DL
|
|
><DT
|
|
><B
|
|
>Table of Contents</B
|
|
></DT
|
|
><DT
|
|
>1. <A
|
|
HREF="#AEN14"
|
|
>Introduction</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>1.1. <A
|
|
HREF="#AEN34"
|
|
>DOSEMU modes of operation</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>1.1.1. <A
|
|
HREF="#AEN38"
|
|
>Terminal mode</A
|
|
></DT
|
|
><DT
|
|
>1.1.2. <A
|
|
HREF="#AEN48"
|
|
>Dumb mode</A
|
|
></DT
|
|
><DT
|
|
>1.1.3. <A
|
|
HREF="#AEN53"
|
|
>SDL mode</A
|
|
></DT
|
|
><DT
|
|
>1.1.4. <A
|
|
HREF="#AEN56"
|
|
>Console graphics mode</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>1.2. <A
|
|
HREF="#AEN73"
|
|
>Running a DOS program directly from Linux.</A
|
|
></DT
|
|
><DT
|
|
>1.3. <A
|
|
HREF="#AEN84"
|
|
>Using a different DOS</A
|
|
></DT
|
|
><DT
|
|
>1.4. <A
|
|
HREF="#AEN91"
|
|
>About this document</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>2. <A
|
|
HREF="#CONFIG"
|
|
>Runtime Configuration Options</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>2.1. <A
|
|
HREF="#AEN136"
|
|
>Format of dosemu.conf and ~/.dosemurc</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>2.1.1. <A
|
|
HREF="#AEN147"
|
|
>Disks, boot directories and floppies</A
|
|
></DT
|
|
><DT
|
|
>2.1.2. <A
|
|
HREF="#AEN172"
|
|
>Controlling amount of debug output</A
|
|
></DT
|
|
><DT
|
|
>2.1.3. <A
|
|
HREF="#AEN177"
|
|
>Basic emulation settings</A
|
|
></DT
|
|
><DT
|
|
>2.1.4. <A
|
|
HREF="#AEN209"
|
|
>Code page and character set</A
|
|
></DT
|
|
><DT
|
|
>2.1.5. <A
|
|
HREF="#AEN232"
|
|
>Terminals</A
|
|
></DT
|
|
><DT
|
|
>2.1.6. <A
|
|
HREF="#AEN237"
|
|
>Keyboard settings</A
|
|
></DT
|
|
><DT
|
|
>2.1.7. <A
|
|
HREF="#AEN251"
|
|
>X Support settings</A
|
|
></DT
|
|
><DT
|
|
>2.1.8. <A
|
|
HREF="#AEN256"
|
|
>Builtin ASPI SCSI Driver</A
|
|
></DT
|
|
><DT
|
|
>2.1.9. <A
|
|
HREF="#AEN286"
|
|
>COM ports and mice</A
|
|
></DT
|
|
><DT
|
|
>2.1.10. <A
|
|
HREF="#AEN302"
|
|
>Printers</A
|
|
></DT
|
|
><DT
|
|
>2.1.11. <A
|
|
HREF="#AEN307"
|
|
>Sound</A
|
|
></DT
|
|
><DT
|
|
>2.1.12. <A
|
|
HREF="#AEN312"
|
|
>Joystick</A
|
|
></DT
|
|
><DT
|
|
>2.1.13. <A
|
|
HREF="#AEN317"
|
|
>Networking under DOSEMU</A
|
|
></DT
|
|
><DT
|
|
>2.1.14. <A
|
|
HREF="#AEN332"
|
|
>Settings for enabling direct hardware access</A
|
|
></DT
|
|
><DT
|
|
>2.1.15. <A
|
|
HREF="#AEN345"
|
|
>Video settings ( console only )</A
|
|
></DT
|
|
><DT
|
|
>2.1.16. <A
|
|
HREF="#AEN365"
|
|
>Time settings</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>3. <A
|
|
HREF="#AEN376"
|
|
>Security</A
|
|
></DT
|
|
><DT
|
|
>4. <A
|
|
HREF="#AEN392"
|
|
>Sound</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>4.1. <A
|
|
HREF="#AEN395"
|
|
>Using the MPU-401 "Emulation"</A
|
|
></DT
|
|
><DT
|
|
>4.2. <A
|
|
HREF="#AEN401"
|
|
>The MIDI daemon</A
|
|
></DT
|
|
><DT
|
|
>4.3. <A
|
|
HREF="#AEN412"
|
|
>Disabling the Emulation at Runtime</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>5. <A
|
|
HREF="#LREDIR"
|
|
>Using Lredir</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>5.1. <A
|
|
HREF="#AEN420"
|
|
>how do you use it?</A
|
|
></DT
|
|
><DT
|
|
>5.2. <A
|
|
HREF="#AEN451"
|
|
>Other alternatives using Lredir</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>6. <A
|
|
HREF="#RUNASUSER"
|
|
>Running dosemu as a normal user</A
|
|
></DT
|
|
><DT
|
|
>7. <A
|
|
HREF="#CDROM"
|
|
>Using CDROMS</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>7.1. <A
|
|
HREF="#AEN503"
|
|
>The built-in driver</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>8. <A
|
|
HREF="#AEN542"
|
|
>Using X</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>8.1. <A
|
|
HREF="#AEN545"
|
|
>Basic information</A
|
|
></DT
|
|
><DT
|
|
>8.2. <A
|
|
HREF="#AEN558"
|
|
>More detailed information, hints and tips</A
|
|
></DT
|
|
><DT
|
|
>8.3. <A
|
|
HREF="#AEN597"
|
|
>The VGA Emulator</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>9. <A
|
|
HREF="#WINDOWS"
|
|
>Running Windows under DOSEMU</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>9.1. <A
|
|
HREF="#AEN650"
|
|
>Mouse in Windows under DOSEMU</A
|
|
></DT
|
|
><DT
|
|
>9.2. <A
|
|
HREF="#AEN654"
|
|
>Windows 3.x in SVGA modes</A
|
|
></DT
|
|
><DT
|
|
>9.3. <A
|
|
HREF="#AEN660"
|
|
>VxD support</A
|
|
></DT
|
|
><DT
|
|
>9.4. <A
|
|
HREF="#AEN663"
|
|
>DOS shell in Windows</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>10. <A
|
|
HREF="#MOUSE"
|
|
>The DOSEMU mouse</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>10.1. <A
|
|
HREF="#AEN670"
|
|
>Setting up the emulated mouse in DOSEMU</A
|
|
></DT
|
|
><DT
|
|
>10.2. <A
|
|
HREF="#AEN679"
|
|
>Problems</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>11. <A
|
|
HREF="#AEN701"
|
|
>Running a DOS application directly from Unix shell</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>11.1. <A
|
|
HREF="#AEN706"
|
|
>Using <B
|
|
CLASS="COMMAND"
|
|
>unix -e</B
|
|
> in autoexec.bat</A
|
|
></DT
|
|
><DT
|
|
>11.2. <A
|
|
HREF="#AEN725"
|
|
>Using the keystroke facility.</A
|
|
></DT
|
|
><DT
|
|
>11.3. <A
|
|
HREF="#AEN731"
|
|
>Using an input file</A
|
|
></DT
|
|
><DT
|
|
>11.4. <A
|
|
HREF="#AEN748"
|
|
>Running DOSEMU within a cron job</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>12. <A
|
|
HREF="#AEN753"
|
|
>Commands & Utilities</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>12.1. <A
|
|
HREF="#AEN756"
|
|
>Programs</A
|
|
></DT
|
|
><DT
|
|
>12.2. <A
|
|
HREF="#AEN850"
|
|
>Drivers</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>13. <A
|
|
HREF="#AEN875"
|
|
>Keymaps</A
|
|
></DT
|
|
><DT
|
|
>14. <A
|
|
HREF="#AEN899"
|
|
>Networking using DOSEMU</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>14.1. <A
|
|
HREF="#AEN901"
|
|
>Direct NIC access</A
|
|
></DT
|
|
><DT
|
|
>14.2. <A
|
|
HREF="#AEN906"
|
|
>Virtual networking</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>14.2.1. <A
|
|
HREF="#AEN923"
|
|
>Bridging</A
|
|
></DT
|
|
><DT
|
|
>14.2.2. <A
|
|
HREF="#AEN927"
|
|
>IP Routing</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>14.3. <A
|
|
HREF="#AEN938"
|
|
>VDE networking backend</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>15. <A
|
|
HREF="#AEN951"
|
|
>Using Windows and Winsock</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>15.1. <A
|
|
HREF="#AEN958"
|
|
>LIST OF REQUIRED SOFTWARE</A
|
|
></DT
|
|
><DT
|
|
>15.2. <A
|
|
HREF="#AEN966"
|
|
>STEP BY STEP OPERATION (LINUX SIDE)</A
|
|
></DT
|
|
><DT
|
|
>15.3. <A
|
|
HREF="#AEN992"
|
|
>STEP BY STEP OPERATION (DOS SIDE)</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
></DL
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN14"
|
|
>1. Introduction</A
|
|
></H2
|
|
><P
|
|
>You can start DOSEMU using
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $ dosemu</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
If you have never used DOSEMU before, and FreeDOS is present, then
|
|
DOSEMU will boot, and present you with a welcome screen and a C:\>
|
|
command prompt.</P
|
|
><P
|
|
>If for some reason it does not start, or DOSEMU crashes somewhere,
|
|
look at ~/.dosemu/boot.log for details.</P
|
|
><P
|
|
>Remember, that you can't use <B
|
|
CLASS="KEYCAP"
|
|
><Ctrl>-C</B
|
|
>
|
|
<SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>within</I
|
|
></SPAN
|
|
> DOS to exit <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>from</I
|
|
></SPAN
|
|
> DOS.
|
|
For this you need to execute <B
|
|
CLASS="COMMAND"
|
|
>exitemu</B
|
|
>
|
|
or, when using the 'DOS in a BOX' <B
|
|
CLASS="KEYCAP"
|
|
><Ctrl><Alt><PgDn></B
|
|
>.</P
|
|
><P
|
|
>Your DOS drives are set up as follows:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> A: floppy drive (if it exists)
|
|
C: points to the Linux directory ~/.dosemu/drive_c. It contains the
|
|
files config.sys, autoexec.bat and a directory for temporary files.
|
|
It is available for general DOS use.
|
|
D: points to your Linux home directory
|
|
E: points to your CD-ROM drive, if it is mounted at /media/cdrom
|
|
Z: points to the read-only DOSEMU and FreeDOS commands directory
|
|
It actually points to ~/mydos/dosemu/drive_z; it appears read-only
|
|
inside DOSEMU.</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
></P
|
|
><P
|
|
>You can use the <B
|
|
CLASS="COMMAND"
|
|
>LREDIR</B
|
|
> DOSEMU command to adjust
|
|
these settings, or edit
|
|
/etc/dosemu/dosemu.conf, ~/.dosemu/.dosemurc, c:\config.sys, or c:\autoexec.bat,
|
|
or change the symbolic links in ~/.dosemu/drives.</P
|
|
><P
|
|
>Enter HELP for more information on DOS and DOSEMU commands.
|
|
Note that FreeDOS COMMAND.COM <B
|
|
CLASS="COMMAND"
|
|
>DIR</B
|
|
> command shows long
|
|
file names if you type <B
|
|
CLASS="COMMAND"
|
|
>DIR/LFN</B
|
|
>.</P
|
|
><P
|
|
>Other useful keys are:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> <Ctrl><Alt><F> toggle full-screen mode in X
|
|
<Ctrl><Alt><K> grab the keyboard in X
|
|
<Ctrl><Alt><Home> grab the mouse in X
|
|
<Ctrl><Alt><Del> reboot
|
|
<Ctrl><^> use special keys on terminals (dosemu -t)</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
></P
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN34"
|
|
>1.1. DOSEMU modes of operation</A
|
|
></H3
|
|
><P
|
|
>There exist various ways of starting DOSEMU, depending on the environment
|
|
and certain command line options. By default, in X, it will start using
|
|
a special 'DOS in a Box' which provides a usual PC setup, using a 80x25
|
|
text mode. It also supports graphics. The box can be rescaled by dragging
|
|
the window borders using the mouse.</P
|
|
><P
|
|
>However, in certain situation you may want to use a different mode.</P
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN38"
|
|
>1.1.1. Terminal mode</A
|
|
></H4
|
|
><P
|
|
>Terminal mode is automatically entered if you do not have X available, for
|
|
instance when logging in remotely from a Windows system or at the Linux
|
|
console. You can force it using:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $ dosemu -t</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
In this mode the display of graphics is impossible, but you can use
|
|
full-screen DOS text mode applications. It is advisable to give the
|
|
terminal window a size of 80 by 25 characters, or use "stty cols 80 rows 25"
|
|
on the Linux console, before starting it because many DOS applications
|
|
are confused about other sizes.</P
|
|
><P
|
|
>You can use the $_internal_char_set option in ~/.dosemu/.dosemurc or
|
|
dosemu.conf to change the code page that DOSEMU thinks that DOS is using.</P
|
|
><P
|
|
>Many terminals do not support various function key combinations. On the
|
|
Linux console you can work around that by using the raw keyboard mode
|
|
(-k flag, or $_rawkeyboard). <B
|
|
CLASS="COMMAND"
|
|
>xterm</B
|
|
>'s support many
|
|
key combinations. In
|
|
other cases you'll have to work around it using the special
|
|
<B
|
|
CLASS="KEYCAP"
|
|
>Ctrl-^</B
|
|
> shortcut
|
|
(<B
|
|
CLASS="KEYCAP"
|
|
>Ctrl-6</B
|
|
> on US keyboards). Press <B
|
|
CLASS="KEYCAP"
|
|
>Ctrl-^ h</B
|
|
>
|
|
for help.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN48"
|
|
>1.1.2. Dumb mode</A
|
|
></H4
|
|
><P
|
|
>For DOS applications that only read from standard input and write to
|
|
standard output, without any full-screen usage, you can use dumb
|
|
mode. To use this you must invoke DOSEMU like
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $ dosemu -dumb</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
this has the advantage that (A) the output of the DOS application stacks
|
|
up in your scroll buffer and (B) you can redirect it to a file such as
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $ dosemu -dumb dir > listing</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
Note that editing is often restricted to BACKSPACE'ing.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN53"
|
|
>1.1.3. SDL mode</A
|
|
></H4
|
|
><P
|
|
>You can start dosemu with the "-S" option to use the SDL library. In
|
|
X it will just look like a regular DOS in a Box but with a different
|
|
shaped text mode mouse cursor. You can also use this mode on frame buffer
|
|
consoles.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN56"
|
|
>1.1.4. Console graphics mode</A
|
|
></H4
|
|
><P
|
|
>Console graphics mode is the hardest to setup and may potentially lock
|
|
up your system, but if it works it gives you direct VGA hardware access
|
|
which may be quicker and more accurate than the emulation used in X.</P
|
|
><P
|
|
>You need root rights to use it. To enable it, it is recommended to use
|
|
"sudo":
|
|
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
>install <B
|
|
CLASS="COMMAND"
|
|
>sudo</B
|
|
> if you haven't already done so</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>use <B
|
|
CLASS="COMMAND"
|
|
>visudo</B
|
|
> as root to add entries such as
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> joeuser hostname=(root) PASSWD: /usr/local/bin/dosemu.bin</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
to your /etc/sudoers file, where "joeuser" is the user who is
|
|
allowed to run privileged DOSEMU and "hostname" is the name of
|
|
your current host (use "ALL" for any host).</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>if you change PASSWD to NOPASSWD then joeuser does not need to type
|
|
the user's password (not root's password) when invoking DOSEMU
|
|
(a little less secure, if somebody hacks into joeuser's account).</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>now invoke DOSEMU using <B
|
|
CLASS="COMMAND"
|
|
>dosemu -s</B
|
|
></P
|
|
></LI
|
|
></UL
|
|
></P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN73"
|
|
>1.2. Running a DOS program directly from Linux.</A
|
|
></H3
|
|
><P
|
|
>You can use something like
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> dosemu "/home/clarence/games/commander keen/keen1.exe"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
which will automatically cause the DOS in DOSEMU to
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> "cd" to the correct directory,</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> execute the program automagically,</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> and quit DOSEMU when finished.</P
|
|
></LI
|
|
></UL
|
|
></P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN84"
|
|
>1.3. Using a different DOS</A
|
|
></H3
|
|
><P
|
|
>It is possible to use a different DOS than the supplied FreeDOS in
|
|
DOSEMU. A straightforward way is to just copy the relevant system
|
|
files (io.sys, msdos.sys, etc.) to ~/.dosemu/drive_c, and then the
|
|
next time you run dosemu it will automatically use them. You may
|
|
need to edit config.sys and autoexec.bat though, if the DOS complains.</P
|
|
><P
|
|
>Another way is to boot directly from a Linux mounted FAT partition,
|
|
with Windows 9x or any DOS installed. You can change the C: drive
|
|
to point to that by using <B
|
|
CLASS="COMMAND"
|
|
>dosemu -i</B
|
|
>.</P
|
|
><P
|
|
>In that case the DOSEMU support commands are available on drive D: instead
|
|
of drive Z:. You might want to use different config.sys and autoexec.bat
|
|
files with your DOS. For example, you can try to copy D:\config.emu
|
|
and D:\autoemu.bat to C:\, adjust them, and use the $_emusys option
|
|
in ~/.dosemu/.dosemurc or dosemu.conf.</P
|
|
><P
|
|
>Manual adjustment of the C: drive is also possible, by changing the
|
|
~/.dosemu/drives/c symbolic link or by specifying it explicitly
|
|
using the $_hdimage run-time option.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN91"
|
|
>1.4. About this document</A
|
|
></H3
|
|
><P
|
|
>The rest of this document goes into more detail about all the different
|
|
settings and possibilities.
|
|
This documentation is derived from a number of smaller documents. This makes it
|
|
easier for individuals to maintain the documentation relevant to their area of
|
|
expertise. Previous attempts at documenting DOSEMU failed because the
|
|
documentation on a large project like this quickly becomes too much for one
|
|
person to handle.</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="CONFIG"
|
|
>2. Runtime Configuration Options</A
|
|
></H2
|
|
><P
|
|
>This section of the document by Hans,
|
|
<A
|
|
HREF="mailto:lermen@fgan.de"
|
|
TARGET="_top"
|
|
><lermen@fgan.de></A
|
|
>. Last
|
|
updated on May 4, 2007, by Bart Oldeman.</P
|
|
><P
|
|
>Most of DOSEMU configuration is done during runtime and per default it
|
|
can use the system wide configuration file dosemu.conf (which is often
|
|
situated in /etc or /etc/dosemu) optionally followed by the users
|
|
~/.dosemurc and additional configurations statements on the commandline
|
|
(-I option). If /etc/dosemu.users exists then dosemu.conf is searched for
|
|
in /etc and otherwise in /etc/dosemu (or an alternative sysconfdir
|
|
compiletime-setting).</P
|
|
><P
|
|
>The default dosemu.conf and ~/.dosemurc have all settings commented
|
|
out for documentation purposes; the commented out values are the
|
|
ones that DOSEMU uses by default. Note that a non-suid type of installation
|
|
does not need the dosemu.users and dosemu.conf files, and the main
|
|
per-user configuration file is $HOME/.dosemurc.
|
|
However, for security reasons, a suid-root installation will not
|
|
run without dosemu.users, and in that case certain dosemu.conf settings
|
|
are ignored by ~/.dosemurc.</P
|
|
><P
|
|
>In fact dosemu.conf and ~/.dosemurc (which have identical syntax)
|
|
are included by the systemwide configuration script global.conf which,
|
|
by default, is built into the DOSEMU binary. As a normal user
|
|
you won't ever think on editing this, only dosemu.conf and your personal
|
|
~/.dosemurc. The syntax of global.conf is described in detail in
|
|
README-tech.txt, so this is skipped here. However, the option -I string too
|
|
uses the same syntax as global.conf, hence, if you are doing some special
|
|
stuff (after you got familar with DOSEMU) you may need to have a look there.</P
|
|
><P
|
|
>The first file expected (and interpreted) before any other configuration
|
|
(such as global.conf, dosemu.conf and ~/.dosemurc) is /etc/dosemu.users
|
|
or /etc/dosemu/dosemu.users. As mentioned above, this file is entirely
|
|
optional for non-suid-root (default) installations.
|
|
Within this file the general permissions are set:</P
|
|
><P
|
|
> <P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> which users are allowed to use DOSEMU.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> which users are allowed to use DOSEMU suid root.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> which users are allowed to have a private lib dir.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> what kind of access class the user belongs to.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> what special configuration stuff the users needs</P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
><P
|
|
>and further more:
|
|
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> whether the lib dir (DOSEMU_LIB_DIR) resides elsewhere.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> setting the loglevel.</P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
><P
|
|
>Except for lines starting with `xxx=' (explanation below),
|
|
each line in dosemu.user corresponds to exactly <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>one</I
|
|
></SPAN
|
|
> valid user count,
|
|
the special user `all' means any user not mentioned earlier. Format:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> [ <login> | all ] [ confvar [ confvar [ ... ] ] ]</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>The below example is from etc/dosemu.users.secure, which you may copy
|
|
to /etc/dosemu.users.
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> root c_all # root is allowed to do all weird things
|
|
nobody nosuidroot guest # variable 'guest' is checked in global.conf
|
|
# to allow only DEXE execution
|
|
guest nosuidroot guest # login guest treated as `nobody'
|
|
myfriend c_all unrestricted private_setup
|
|
myboss nosuidroot restricted private_setup
|
|
all nosuidroot restricted # all other users have normal user restrictions</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
Note that the above `restricted' is checked in global.conf and will
|
|
disable all secure relevant feature. Setting `guest' will force
|
|
setting `restricted' too.</P
|
|
><P
|
|
>The use of `nosuidroot' will force a suid root dosemu binary to exit,
|
|
the user may however use a non-suid root copy of the binary.
|
|
For more information on this look at README-tech,
|
|
chapter 11.1 `Privileges and Running as User'</P
|
|
><P
|
|
>Giving the keyword `private_setup' to a user means he/she can have a private
|
|
DOSEMU lib under $HOME/.dosemu/lib. If this directory is existing, DOSEMU
|
|
will expect all normally under DOSEMU_LIB_DIR within that directory.
|
|
As this would be a security risk, it only will be allowed, if the used DOSEMU
|
|
binary is non-suid-root. If you really trust a user you may additionally give
|
|
the keyword `unrestricted', which will allow this user to execute a suid-root
|
|
binary even on a private lib directory (though, be aware).</P
|
|
><P
|
|
>In addition, dosemu.users can be used to define some global settings, which
|
|
must be known before any other file is accessed, such as:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> default_lib_dir= /opt/dosemu # replaces DOSEMU_LIB_DIR
|
|
log_level= 2 # highest log level</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>With `default_lib_dir=' you may move DOSEMU_LIB_DIR elsewhere, this mostly
|
|
is interesting for distributors, who want it elsewhere but won't patch the
|
|
DOSEMU source just for this purpose. But note, the dosemu supplied scripts
|
|
and helpers may need some adaption too in order to fit your new directory.</P
|
|
><P
|
|
>The `log_level=' can be 0 (never log) or 1 (log only errors) or 2 (log all)
|
|
and controls the ammount written to the systems log facility (notice).
|
|
This keyword replaces the former /etc/dosemu.loglevel file, which now is
|
|
obsolete.</P
|
|
><P
|
|
>Nevertheless, for a first try of DOSEMU you may prefer etc/dosemu.users.easy,
|
|
which just contains
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> root c_all
|
|
all c_all</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
to allow everybody all weird things. For more details on security issues
|
|
have a look at chapter 3.</P
|
|
><P
|
|
>After the file dosemu.users, the file dosemu.conf (via global.conf, which
|
|
may be built-in) is interpreted,
|
|
and only during global.conf parsing the access to all configuration options is
|
|
allowed. dosemu.conf normally lives in the same directory as dosemu.users,
|
|
for instance /etc/dosemu or /etc (that is, sysconfdir in compiletime-settings).
|
|
|
|
Your personal ~/.dosemurc is included directly after dosemu.conf,
|
|
but has less access rights (in fact the lowest level), all variables you
|
|
define within ~/.dosemurc transparently are prefixed with `dosemu_' such
|
|
that the normal namespace cannot be polluted (and a hacker cannot overwrite
|
|
security relevant enviroment variables). Within global.conf only those
|
|
~/.dosemurc created variables, that are needed are taken over and may
|
|
overwrite those defined in dosemu.conf.</P
|
|
><P
|
|
>The dosemu.conf (global.conf) may check for the configuration variables,
|
|
that are set in dosemu.users and optionaly include further configuration
|
|
files. But once dosemu.conf (global.conf) has finished interpretation,
|
|
the access to secure relevant configurations is (class-wise) restricted while
|
|
the following interpretation of (old) .dosrc and -I statements.</P
|
|
><P
|
|
>For more details on security settings/issues look at README-tech.txt, for
|
|
now (using DOSEMU the first time) you should need only the below description
|
|
of dosemu.conf (~/.dosemurc)</P
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN136"
|
|
>2.1. Format of dosemu.conf and ~/.dosemurc</A
|
|
></H3
|
|
><P
|
|
>All settings are variables, and have the form of</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_xxx = (n)</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
or
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_zzz = "s"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>where `n' is a numerical or boolean value and `s' is a string.
|
|
Note that the brackets are important, else the parser will not decide
|
|
for a number expression. For numbers you may have complete expressions
|
|
( such as (2*1024) ) and strings may be concatenated such as</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_zzz = "This is a string containing '", '"', "' (quotes)"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>Hence a comma separated list of strings is concatenated.
|
|
All these settings are also environment variables. You can override them
|
|
by prefixing with dosemu_, e.g.
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> dosemu__X_title="DOS was in the BOX" dosemu</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
temporarily changes the X window title.</P
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN147"
|
|
>2.1.1. Disks, boot directories and floppies</A
|
|
></H4
|
|
><P
|
|
>The parameter settings are tailored to fit the recommended
|
|
usage of disk and floppy access. There are other methods too, but for these
|
|
you have to look at README-tech.txt (and you may need to modify global.conf).
|
|
We strongly recommend that you use the proposed techique. Here the normal
|
|
setup:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> # List of hdimages or boot directories under
|
|
# ~/.dosemu, the system config directory (/etc/dosemu by default), or
|
|
# syshdimagedir (/var/lib/dosemu by default) assigned in this order
|
|
# such as "hdimage_c directory_d hdimage_e"
|
|
# Absolute pathnames are also allowed.
|
|
$_hdimage = "drives/*"
|
|
$_floppy_a ="threeinch" # or "fiveinch" or empty, if not existing
|
|
$_floppy_b = "" # dito for B:
|
|
$_cdrom = "/dev/cdrom" # list of CDROM devices</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>A hdimage is
|
|
a file containing a virtual image of a DOS-FAT filesystem. Once you have
|
|
booted it, you (or autoexec.bat) can use `lredir' to access any directory
|
|
in your Linux tree as DOS drive (a -t msdos mounted too).
|
|
Look at chapter 5 (Using Lredir) for more details.
|
|
If you want to create your own hdimage use "mkfatimage16" (see the manual
|
|
page). To make it bootable you can make it, say, drive F:, and use
|
|
"SYS F:" at the DOS prompt.
|
|
The DOSEMU-HOWTO explains how to manipulate it using mtools.</P
|
|
><P
|
|
>You can also specify a Linux directory containing all what you want to have
|
|
under your DOS C:. Copy your IO.SYS, MSDOS.SYS or equivalent to that
|
|
directory (e.g. DOSEMU_LIB_DIR/bootdir), set
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_hdimage = "bootdir"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
and up it goes. Alternatively you can specify
|
|
an absolute path such as "/dos" or "/home/username/dosemu/freedos".
|
|
DOSEMU makes a lredir'ed drive out of it and can boot from it.
|
|
You can edit the config.sys and the autoexec.bat within this directory
|
|
before you start dosemu.
|
|
Further more, you may have a more sohisticated setup. Given you want to run
|
|
the same DOS drive as you normal have when booting into native DOS,
|
|
then you just mount you DOS partition under Linux (say to /dos) and
|
|
put links to its subdirectories into the boot dir. This way you can decide
|
|
which files/directories have to be visible under DOSEMU and which have to be
|
|
different. Here a small and not complete example bootdir setup:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> config.sys
|
|
autoexec.bat
|
|
command.com -> /dos/command.com
|
|
io.sys -> /dos/io.sys
|
|
msdos.sys -> /dos/msdos.sys
|
|
dos -> /dos/dos
|
|
bc -> /dos/bc
|
|
windows -> /dos/windows</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>As a further enhancement of your drives setup you may even use the following
|
|
strategy: given you have the following directory structure in one the
|
|
directories where the $_hdimage setting applies (this is done by default
|
|
in ~/.dosemu and in /etc/dosemu)
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> drives/c
|
|
drives/d</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
where <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>c</I
|
|
></SPAN
|
|
> and <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>d</I
|
|
></SPAN
|
|
> are symbolic
|
|
links to appropriate DOS useable directories, then the following single
|
|
statement
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_hdimage = "drives/*"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
will assign all these directories to drive C: and D: respectively.
|
|
Note, however, that the <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>order</I
|
|
></SPAN
|
|
> in which the directories under drives/*
|
|
are assigned comes from the order given by /bin/ls. Hence the folling
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> drives/x
|
|
drives/a</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
will assign C: to drives/a and D: to drives/x, keep that in mind.</P
|
|
><P
|
|
>In some rare cases you may have problems accessing Lredir'ed drives
|
|
(especially when your DOS application refuses to run on a 'network drive'),
|
|
For this to overcome you may need to use so-called `partition access',
|
|
use a floppy, or a special-purpose hdimage. The odd
|
|
with partition access is, that you <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>never</I
|
|
></SPAN
|
|
> should have
|
|
those partition
|
|
mounted in the Linux file system at the same time as you use it in DOSEMU
|
|
(which is quite uncomfortable and dangerous on a multitasking OS such as
|
|
Linux ). Though DOSEMU checks for mounted partitions, there may be races
|
|
that are not caught. In addition, when your DOSEMU crashes, it may leave
|
|
some FAT sectors unflushed to the disk, hence destroying the partition.
|
|
Anyway, if you think you need it, you must have r/w access to the partition
|
|
in /dev, and you have to `assign' real DOS partitions as follows:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_hdimage = "hdimage.first /dev/hda1 /dev/sdc4:ro"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>The above will have `hdimage.first' as booted drive C:, /dev/hda1 as D:
|
|
(read/write) and /dev/sdc4 as E: (readonly). You may have any kind of order
|
|
within `$_hdimage', hence</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_hdimage = "/dev/hda1 hdimage.first /dev/sdc4:ro"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>would have /dev/hda1 as booted drive C:. Note that the access to the
|
|
/dev/* devices <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>must</I
|
|
></SPAN
|
|
> be exclusive (no other process should use it)
|
|
except for `:ro'.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN172"
|
|
>2.1.2. Controlling amount of debug output</A
|
|
></H4
|
|
><P
|
|
>DOSEMU will help you find problems, when you enable its debug messages.
|
|
These will go into the file, that you defined via the `-o file' or `-O'
|
|
commandline option (the latter prints to stderr). If you do not specify
|
|
any -O or -o switch, then the log output will be written to ~/.dosemu/boot.log.
|
|
You can preset the kind of debug output via</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_debug = "-a"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
where the string contains all you normally may pass to the `-D' commandline
|
|
option (look at the man page for details). </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN177"
|
|
>2.1.3. Basic emulation settings</A
|
|
></H4
|
|
><P
|
|
>Whether a numeric processor should be shown to the DOS space
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_mathco = (on)</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>Which type of CPU should be emulated (NOTE: this is not the one you
|
|
are running on, but your setting may not exeed the capabilities of
|
|
the running CPU). Valid values are: 80[345]86
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_cpu = (80386)</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>To let DOSEMU use the Pentium cycle counter (if availabe) to do better timing
|
|
use the below</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_rdtsc = (off) # or on</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
Note that the RDTSC can be unreliable on SMP systems, and in combination with
|
|
power management (APM/ACPI).</P
|
|
><P
|
|
>For the above `rdtsc' feature DOSEMU needs to know the exact CPU clock,
|
|
it normally calibrates it itself, but is you encounter a wrong mesurement
|
|
you may overide it such as
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_cpuspeed = (166.666) # 0 = let DOSEMU calibrate</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>If you have a PCI board you may allow DOSEMU to access the PCI
|
|
configuration space by defining the below
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_pci = (auto) # or auto, or off</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>NOTE: `$_pci' can <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>not</I
|
|
></SPAN
|
|
> be overwritten by ~/.dosemurc.
|
|
The "on" setting can be very dangerous because it gives DOSEMU complete
|
|
write access; you need to edit dosemu.users to enable it.
|
|
In console graphics mode, some video card BIOSes need some PCI
|
|
configuration space access,
|
|
which is enabled by the default (auto) setting. This setting is far more
|
|
restricted and less dangerous.</P
|
|
><P
|
|
>Starting with dosemu-1.0 there is a flexible way to handle the mapping
|
|
strategy used by DOSEMU, which is needed by video emulation, EMS,
|
|
DPMI and XMS support and other things to map a given page of memory to the
|
|
required virtual DOS address space.</P
|
|
><P
|
|
>Normally DOSEMU will detect the proper mapping driver for the kernel you are
|
|
using, however, in some cases you may want to define it explicitely to
|
|
overcome eventual problems. For this you can specify
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_mapping= "mapfile"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
to force the use of the driver, which uses a temporary file.</P
|
|
><P
|
|
>If you are using a kernel above 2.3.40, you may use
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_mapping= "mapshm"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
which uses a POSIX shared memory object (the default) or
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_mapping= "mapashm"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
which uses anonymous shared memory (in case the above gives problems).</P
|
|
><P
|
|
>Note, that in case of `mapfile' and `mapshm' the size of the file or the
|
|
segment depend on how much memory you configured for XMS, EMS and DPMI
|
|
(see below).
|
|
You should take care yourself that you have enough diskspace
|
|
for 'mapfile'. For 'mapshm' the tmpfs mount option 'size=nbytes' controls
|
|
the amount of space; by default it is half of the (real machine) memory.</P
|
|
><P
|
|
>Defining the memory layout, which DOS should see:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_xms = (8192) # in Kbyte
|
|
$_ems = (2048) # in Kbyte
|
|
$_ems_frame = (0xe400)
|
|
$_dpmi = (0x5000) # in Kbyte
|
|
$_dosmem = (640) # in Kbyte, < 640</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
Note that (other as in native DOS) each piece of mem is separate, hence
|
|
DOS perhaps will show other values for 'extended' memory. To use EMS
|
|
memory you must load the supplied ems.sys device driver. For XMS memory
|
|
you must either use a DOS XMS driver such as himem.sys, himem.exe,
|
|
fdxms.sys, or fdxxms.sys, or the internal XMS driver via ems.sys.</P
|
|
><P
|
|
>If you want mixed operation on the filesystem, from which you
|
|
boot DOSEMU (native and via DOSEMU), it may be necessary to have two
|
|
separate sets of config.sys and system.ini. DOSEMU can
|
|
fake a different file extension, so DOS will get other files when
|
|
running under DOSEMU. Faking autoexec.bat cannot happen in a reliable
|
|
fashion, so if you would like to use an autoexec.bat replacement then
|
|
just use the SHELL command in config.XXX, like this:</P
|
|
><P
|
|
>SHELL=COMMAND.COM /P /K AUTOEMU.BAT</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_emusys = "" # empty or 3 char., config.sys -> config.XXX
|
|
$_emuini = "" # empty or 3 char., system.ini -> system.XXX</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>As you would realize at the first glance: DOS will <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>not</I
|
|
></SPAN
|
|
> have the
|
|
the CPU for its own. But how much it gets from Linux, depends on the setting
|
|
of `hogthreshold'.
|
|
The HogThreshold value determines how nice Dosemu will be about
|
|
giving other Linux processes a chance to run.</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_hogthreshold = (1) # 0 == all CPU power to DOSEMU
|
|
# 1 == max power for Linux
|
|
# >1 the higher, the faster DOSEMU will be</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN209"
|
|
>2.1.4. Code page and character set</A
|
|
></H4
|
|
><P
|
|
>To select the character set and code page for use with DOSEMU you have
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_external_char_set = "XXX"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
where XXX is one of
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> "cp437", "cp737", "cp773", "cp775", "cp850", "cp852", "cp857", "cp860",
|
|
"cp861", "cp862", "cp863", "cp864", "cp865", "cp866", "cp869", "cp874",
|
|
"cp1125", "cp1251"
|
|
"iso8859-1", "iso8859-2", "iso8859-3", "iso8859-4", "iso8859-5", "iso8859-6",
|
|
"iso8859-7", "iso8859-8", "iso8859_9", "iso8859-14", "iso8859-15", "koi8-r"
|
|
"koi8-u", "koi8-ru", "utf8"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
></P
|
|
><P
|
|
>The external character set is used to:
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> compute the unicode values of characters coming in from the terminal</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> compute the character set index of unicode characters output to
|
|
a terminal display screen.</P
|
|
></LI
|
|
></UL
|
|
>
|
|
The default is to use "", which denotes the current locale, and is usually
|
|
the right setting.</P
|
|
><P
|
|
>If you set a DOS external character set, then it is to the user
|
|
to load a proper DOS font (cp437.f16, cp850.f16 or cp852.f16 on the
|
|
console).</P
|
|
><P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_internal_char_set = "XXX"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
where XXX is one of:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> "cp437", "cp737", "cp773", "cp775", "cp850", "cp852", "cp857", "cp860",
|
|
"cp861", "cp862", "cp863", "cp864", "cp865", "cp866", "cp869", "cp874"
|
|
"cp895", "cp1125", "cp1251", "bg-mik"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
></P
|
|
><P
|
|
>The internal character set is used to:
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> compute the unicode value of characters of video memory,
|
|
when using DOSEMU in a terminal or using X with a unicode
|
|
font.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> compute the character set index of unicode characters
|
|
returned by bios keyboard translation services.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> compute the unicode values of characters in file names.</P
|
|
></LI
|
|
></UL
|
|
></P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN232"
|
|
>2.1.5. Terminals</A
|
|
></H4
|
|
><P
|
|
>This section applies whenever you run DOSEMU remotely, in an xterm or
|
|
on the Linux console without graphics.
|
|
Color terminal support is now built into DOSEMU. Skip this section for
|
|
now to use terminal defaults, until you get DOSEMU to work.
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_term_color = (on) # terminal with color support
|
|
$_term_updfreq = (4) # time between refreshs (units: 20 == 1 second)
|
|
$_escchar = (30) # 30 == Ctrl-^, special-sequence prefix</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
`term_updfreq' is a number indicating the frequency of terminal updates of
|
|
the screen. The smaller the number, the more frequent. A value of 20 gives
|
|
a frequency of about one per second, which is very slow.
|
|
`escchar' is a number (ascii code below 32) that specifies the control
|
|
character used as a prefix character for sending alt, shift, ctrl, and
|
|
function keycodes. The default value is 30 which is Ctrl-^. So, for
|
|
example,
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> F1 is 'Ctrl-^1', Alt-F7 is 'Ctrl-^s Ctrl-^7'.
|
|
For online help, press 'Ctrl-^h' or 'Ctrl-^?'.</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN237"
|
|
>2.1.6. Keyboard settings</A
|
|
></H4
|
|
><P
|
|
>When running DOSEMU from console (also remote from console) or X you
|
|
may need to define a proper keyboard layout. It is possible to let
|
|
DOSEMU do this work automatically for you (see <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>auto</I
|
|
></SPAN
|
|
> below), however,
|
|
this may fail and you'll end up defining it explicitely. This is done either
|
|
by choosing one on the internal keytables or by loading an external
|
|
keytable from DOSEMU_LIB_DIR/keymap/* (which you may modify according
|
|
to your needs). Both sets have identical names (though you may add
|
|
any new one to DOSEMU_LIB_DIR/keymap/*):
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> be finnish hu-latin2 sg-latin1
|
|
de finnish-latin1 it sw
|
|
de-latin1 fr keyb-no uk
|
|
dk fr-latin1 no-latin1 us
|
|
dk-latin1 hr-cp852 po
|
|
dvorak hr-latin2 sf
|
|
es hu sf-latin1
|
|
es-latin1 hu-cwi sg jp106
|
|
cz-qwerty cz-qwertz</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
You define an internal keytable such as
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_layout = "name"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
where `name' is one of the above. To load a keytable you just prefix
|
|
the string with "load" such as
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_layout = "load de-latin1"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>Note, however, that you have to set
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_X_keycode = (on)</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
to use this feature under X, because by default the keytable is
|
|
forced to be neutral (us). Normally you will have the correct settings
|
|
of your keyboard given by the X-server.</P
|
|
><P
|
|
>The most comfortable method, however, is to first let DOSEMU set the
|
|
keyboard layout itself. This involves 2 parts and can be done by setting
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_X_keycode = (auto)</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
which checks for existence of the X keyboard extension and if yes,
|
|
it sets $_X_keycode to 'on', that means the DOSEMU keytables
|
|
are active. The second part (which is independent from $_X_keycode)
|
|
can be set by
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_layout = "auto"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
DOSEMU then queries the keyboard layout from the kernel or X (which
|
|
only does work on the console or X, but not in remote text terminals)
|
|
and generates a new DOSEMU
|
|
keytable out of the kernel information. This currently seems
|
|
only to work for latin-1 layouts, the latin-2 type of accents
|
|
seem not to exist so far in the kernel (linux/keyboard.h).
|
|
The resulting table can be monitor with DOSEMU 'keytable dump'
|
|
feature (see README-tech.txt) for details).</P
|
|
><P
|
|
>When being on console you might wish to use raw keyboard, especially
|
|
together with some games, that don't use the BIOS/DOS to get their
|
|
keystrokes.
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_rawkeyboard = (1)</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
However, be carefull, when the application locks, you may not be able
|
|
to switch your console and recover from this. For details on recovering
|
|
look at README-tech.txt (Recovering the console after a crash).</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN251"
|
|
>2.1.7. X Support settings</A
|
|
></H4
|
|
><P
|
|
>If DOSEMU is running in its own X-window (not xterm), you may need to
|
|
tailor it to your needs. Here a summary of the settings and a brief
|
|
description what they mean. A more detailed description of values
|
|
one can be found at chapter 2.2.14 (X Support settings) of README-tech.txt</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_X_updfreq = (5) # time between refreshs (units: 20 == 1 second)
|
|
$_X_title = "DOS in a BOX" # Title in the top bar of the window
|
|
$_X_icon_name = "xdos" # Text for icon, when minimized
|
|
$_X_keycode = (off) # on == translate keybord via dosemu keytables
|
|
$_X_blinkrate = (8) # blink rate for the cursor
|
|
$_X_font = "" # basename from /usr/X11R6/lib/X11/fonts/misc/*
|
|
# (without extension) e.g. "vga"
|
|
$_X_mitshm = (on) # Use shared memory extensions
|
|
$_X_sharecmap = (off) # share the colormap with other applications
|
|
$_X_fixed_aspect = (on) # Set fixed aspect for resize the graphics window
|
|
$_X_aspect_43 = (on) # Always use an aspect ratio of 4:3 for graphics
|
|
$_X_lin_filt = (off) # Use linear filtering for >15 bpp interpol.
|
|
$_X_bilin_filt = (off) # Use bi-linear filtering for >15 bpp interpol.
|
|
$_X_mode13fact = (2) # initial factor for video mode 0x13 (320x200)
|
|
$_X_winsize = "" # "x,y" of initial windows size
|
|
$_X_gamma = (1.0) # gamma correction
|
|
$_X_vgaemu_memsize = (1024) # size (in Kbytes) of the frame buffer
|
|
# for emulated vga
|
|
$_X_lfb = (on) # use linear frame buffer in VESA modes
|
|
$_X_pm_interface = (on) # use protected mode interface for VESA modes
|
|
$_X_mgrab_key = "" # KeySym name to activate mouse grab, empty == off
|
|
$_X_vesamode = "" # "xres,yres ... xres,yres"
|
|
# List of vesamodes to add. The list has to contain
|
|
# SPACE separated "xres,yres" pairs</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN256"
|
|
>2.1.8. Builtin ASPI SCSI Driver</A
|
|
></H4
|
|
><P
|
|
>The builtin ASPI driver (a SCSI interface protocol defined by Adaptec) can be
|
|
used to run DOS based SCSI drivers that use this standard (most SCSI devices
|
|
ship with such a DOS driver). This enables you to run hardware on Linux, that
|
|
normally isn't supported otherwise, such as CD writers, Scanners e.t.c.
|
|
The driver was successfully tested with Dat-streamers, EXABYTE tapedrives,
|
|
JAZ drives (from iomega) and CD writers. To make it work under DOSEMU
|
|
you need
|
|
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> to configure $_aspi to define which
|
|
of the /dev/sgX devices you want to show up in DOSEMU.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> to load the DOSEMU aspi.sys stub driver within config.sys
|
|
(e.g. DEVICE=ASPI.SYS) <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>before</I
|
|
></SPAN
|
|
> any ASPI using driver.</P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
><P
|
|
>The $_aspi variable takes strings listing all generic SCSI
|
|
devices, that you want give to DOSEMU. NOTE: You should make sure,
|
|
that they are <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>not</I
|
|
></SPAN
|
|
> used by Linux elsewhere, else you would come into
|
|
<SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>much</I
|
|
></SPAN
|
|
> trouble. To help you not doing the wrong thing, DOSEMU can
|
|
check the devicetype of the SCSI device such as
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_aspi = "sg2:WORM"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
in which case you define /dev/sg2 being a CD writer device. If you omit
|
|
the type,
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
>
|
|
$_aspi = "sg2 sg3 sg4"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
DOSEMU will refuse any device that is a disk drive (imagine, what would happen
|
|
if you try to map a CD writer to the disk which contains a mounted Linux FS?).
|
|
If you <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>want</I
|
|
></SPAN
|
|
> to map a disk drive to DOSEMU's ASPI driver, you need to
|
|
tell it explicitely
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_aspi = "sg1:Direct-Access"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
or
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_aspi = "sg1:0"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
and as you can see, `Direct-Access' is the devicetype reported by
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $ cat /proc/scsi/scsi</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
which will list all SCSI devices in the order they are assigned to
|
|
the /dev/sgX devices (the first being /dev/sg0). You may also use the
|
|
DOSEMU supplied tool `scsicheck' (in src/tools/peripher), which helps
|
|
a lot to get the configuration right:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $ scsicheck
|
|
sg0 scsi0 ch0 ID0 Lun0 ansi2 Direct-Access(0) IBM DCAS-34330 S61A
|
|
$_aspi = "sg0:Direct-Access:0" (or "0/0/0/0:Direct-Access:0")
|
|
sg1 scsi0 ch0 ID5 Lun0 ansi2 Direct-Access(0) IOMEGA ZIP 100 D.08
|
|
$_aspi = "sg1:Direct-Access:5" (or "0/0/5/0:Direct-Access:5")
|
|
sg2 scsi0 ch0 ID6 Lun0 ansi2 CD-ROM(5) TOSHIBA CD-ROM XM-5701TA 0167
|
|
$_aspi = "sg2:CD-ROM:6" (or "0/0/6/0:CD-ROM:6") <== multiple IDs
|
|
sg3 scsi1 ch0 ID4 Lun0 ansi2 Sequential-Access(1) HP C1533A 9503
|
|
$_aspi = "sg3:Sequential-Access:4" (or "1/0/4/0:Sequential-Access:4")
|
|
sg4 scsi1 ch0 ID6 Lun0 ansi1 WORM(4) IMS CDD522/10 1.07
|
|
$_aspi = "sg4:WORM:6" (or "1/0/6/0:WORM:6") <== multiple IDs</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>In the above example there are two scsi hostadapters (scsi0 and scsi1) and
|
|
DOSEMU will not show more than <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>one</I
|
|
></SPAN
|
|
> hostadapter to DOS (mapping them
|
|
all into one), hence you would get problems accessing sg2 and sg4. For this
|
|
you may remap a different targetID such as
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_aspi = "sg2:CD-ROM:5 sg4:WORM"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
and all would be fine. From the DOS side the CD-ROM appears as target 5
|
|
and the WORM (CD writer) as target 6.
|
|
Also from the above scsicheck output, you can see, that you can opt
|
|
to use a `host/channel/ID/LUN' construct in place of `sgX' such as
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_aspi = "0/0/6/0:CD-ROM:5 1/0/6/0:WORM"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
which is exactly the same as the above example, exept it will assign
|
|
the right device, even if for some reasons you have changed the order
|
|
in which sgX device are assigned by the kernel. Those changes happen, if
|
|
you turned off power of one device `between' or if you play with dynamic
|
|
allocation of scsi devices via the /proc/scsi interface such as
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> echo "scsi remove-single-device 0 0 5 0" >/proc/scsi/scsi</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
to delete a device and
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> echo "scsi add-single-device 0 0 5 0" >/proc/scsi/scsi</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
to add a device. HOWEVER, we <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>strongly</I
|
|
></SPAN
|
|
> discourage
|
|
you to use these kernel feature for temporaryly switching off
|
|
power of connected devices or even unplugging them: normal SCSI busses
|
|
are <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>not</I
|
|
></SPAN
|
|
> hotpluggable. Damage may happen and uncontroled voltage
|
|
bursts during power off/on may lock your system !!!</P
|
|
><P
|
|
>Coming so far, <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>one</I
|
|
></SPAN
|
|
> big problem remains: the (hard coded) buffersize for
|
|
the sg devices in the Linux kernel (default 32k) may be to small for DOS
|
|
applications and, if your distributor yet didn't it, you may need to
|
|
recompile your kernel with a bigger buffer. The buffer size is defined
|
|
in linux/include/scsi/sg.h and to be on the secure side you may define
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> #define SG_BIG_BUFF (128*1024-512) /* 128 Kb buffer size */</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
though, CD writers are reported to work with 64Kb and the `Iomega guest'
|
|
driver happily works with the default size of 32k.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN286"
|
|
>2.1.9. COM ports and mice</A
|
|
></H4
|
|
><P
|
|
>We have simplified the configuration for mice and serial ports and
|
|
check for depencies between them. If all strings in the below example
|
|
are empty, then no mouse and/or COM port is available. Note. that you
|
|
need <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>no</I
|
|
></SPAN
|
|
> mouse.com driver installed in your DOS environment, DOSEMU
|
|
has the mousedriver builtin. The mouse settings below only apply to
|
|
DOSEMU in the Linux console; in X and terminals the mouse is detected
|
|
automatically. The below example is such a setup</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_com1 = "" # e.g. "/dev/mouse" or "/dev/ttyS0"
|
|
$_com2 = "/dev/modem" # e.g. "/dev/modem" or "/dev/ttyS1"
|
|
|
|
$_mouse = "microsoft" # one of: microsoft, mousesystems, logitech,
|
|
# mmseries, mouseman, hitachi, busmouse, ps2
|
|
$_mouse_dev = "/dev/mouse" # one of: com1, com2 or /dev/mouse
|
|
$_mouse_flags = "" # list of none or one or more of:
|
|
# "emulate3buttons cleardtr"
|
|
$_mouse_baud = (0) # baudrate, 0 == don't set</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>The above example lets you have your modem on COM2, COM1 is spare (as
|
|
you may have your mouse under native DOS there and don't want to change
|
|
the configuration of your modem software between boots of native DOS and Linux)</P
|
|
><P
|
|
>However, you may use your favorite DOS mouse driver and directly let it
|
|
drive COM1 by changing the below variables (rest of variables unchanged)</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_com1 = "/dev/mouse"
|
|
$_mouse_dev = "com1"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>And finaly, when you have a PS/2 or USB mouse on your machine you use
|
|
the built-in mouse driver (not your mouse.com) to get it work:
|
|
( again leaving the rest of variables unchanged)</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_mouse = "ps2"
|
|
$_mouse_dev = "/dev/mouse" </PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>When using a PS/2 or USB mouse or when having more than 2 serial ports you may
|
|
of course assign _any_ free serialdevice to COM1, COM2. The order doesn't
|
|
matter:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_com1 = "/dev/ttyS2"
|
|
$_com2 = "/dev/ttyS0"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN302"
|
|
>2.1.10. Printers</A
|
|
></H4
|
|
><P
|
|
>Printer is emulated by piping printer data to your normal Linux printer.
|
|
The belows tells DOSEMU which printers to use. The `timeout' tells DOSEMU
|
|
how long to wait after the last output to LPTx before considering the
|
|
print job as `done' and to close it.</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> # Print commands to use for LPT1, LPT2 and LPT3.
|
|
# Default: "lpr -l, lpr -l -P lpt2, lpr -l P lpt3"
|
|
# Which means: use the default print queue for LPT1, "lpt2" queue for LPT2,
|
|
# "lpt3" queue for LPT3. "-l" means raw printing mode (no preprocessing).
|
|
|
|
$_lpt1 = "lpr -l"
|
|
$_lpt2 = "lpr -l -P lpt2"
|
|
$_lpt3 = "lpr -l -P lpt3"
|
|
|
|
$_printer_timeout = (20)# idle time in seconds before spooling out</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN307"
|
|
>2.1.11. Sound</A
|
|
></H4
|
|
><P
|
|
>The following settings will tell DOSEMU to emulate an SB16 sound
|
|
card using your Linux sound drivers. For more information see
|
|
sound-usage.txt.</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_sound = (on) # sound support on/off
|
|
$_sb_base = (0x220) # base IO-address (HEX)
|
|
$_sb_irq = (5) # IRQ
|
|
$_sb_dma = (1) # Low 8-bit DMA channel
|
|
$_sb_hdma = (5) # High 16-bit DMA channel
|
|
$_sb_dsp = "/dev/dsp" # Path to the sound device
|
|
$_sb_mixer = "" # path to the mixer control
|
|
$_mpu_base = (0x330) # base address for the MPU-401 chip (HEX)</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN312"
|
|
>2.1.12. Joystick</A
|
|
></H4
|
|
><P
|
|
>Here are the settings for Joystick emulation.</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_joy_device = "/dev/js0 /dev/js1"
|
|
# 1st and 2nd joystick device
|
|
# e.g. "/dev/js0" or "/dev/js0 /dev/js1"
|
|
# (or "" if you don't want joystick support)
|
|
#
|
|
$_joy_dos_min = (1) # range for joystick axis readings, must be > 0
|
|
$_joy_dos_max = (150) # avoid setting this to > 250
|
|
$_joy_granularity = (1) # the higher, the less sensitive -
|
|
# useful if you have a wobbly joystick
|
|
#
|
|
$_joy_latency = (1) # delay between nonblocking linux joystick reads
|
|
# increases performance if >0 and processor>=Pentium
|
|
# recommended: 1-50ms or 0 if unsure</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN317"
|
|
>2.1.13. Networking under DOSEMU</A
|
|
></H4
|
|
><P
|
|
>Turn the following option `on' if you require IPX/SPX emulation,
|
|
there is no need to load IPX.COM within the DOS session.
|
|
( the option does not emulate LSL.COM, IPXODI.COM, etc. )
|
|
And NOTE: You must have IPX protocol configured into the kernel.</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_ipxsupport = (on)</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>Enable Novell 8137->raw 802.3 translation hack in new packet driver.</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_novell_hack = (on)</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>If you make use of TUN/TAP driver, then you can select it via</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_vnet = "tap"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>But if you just need 'single' packet driver support that talks to, for
|
|
instance, your ethernet card eth0 then you need to set</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_netdev = "eth0"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>Note that dosnet and eth0 require raw packet access, and hence
|
|
(suid)-root. If $_vnet = "dosnet", then $_netdev will default to "dsn0".
|
|
If you would like to use persistent TUN/TAP devices then you
|
|
need to specifify the TAP device in $_netdev.
|
|
For more on this look at chapter 15 (Networking using DOSEMU).</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN332"
|
|
>2.1.14. Settings for enabling direct hardware access</A
|
|
></H4
|
|
><P
|
|
>The following settings (together with the direct console video settings
|
|
below make it possible for DOSEMU to access your real (non-emulated)
|
|
computer hardware directly. Because Linux does not permit this for
|
|
ordinary users, DOSEMU needs to be run as root, via sudo or suid-root
|
|
to be able to use these settings. They can NOT be overwritten by the
|
|
user configuration file ~/.dosemurc.
|
|
You must also run dosemu with the "-s" switch. This activates sudo
|
|
when appropriate; without it, even root will not get direct hardware
|
|
access.</P
|
|
><P
|
|
>Here you tell DOSEMU what to do when DOS wants let play the speaker:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_speaker = "" # or "native" or "emulated"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>And with the below may gain control over <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>real</I
|
|
></SPAN
|
|
> ports on you machine.
|
|
But:</P
|
|
><P
|
|
><SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>WARNING: GIVING ACCESS TO PORTS IS BOTH A SECURITY CONCERN AND
|
|
SOME PORTS ARE DANGEROUS TO USE. PLEASE SKIP THIS SECTION, AND
|
|
DON'T FIDDLE WITH THIS SECTION UNLESS YOU KNOW WHAT YOU'RE DOING.</I
|
|
></SPAN
|
|
></P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_ports = "" # list of portnumbers such as "0x1ce 0x1cf 0x238"
|
|
# or "0x1ce range 0x280,0x29f 310"
|
|
# or "range 0x1a0,(0x1a0+15)"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>If you have hardware, that is not supported under Linux but you have
|
|
a DOS driver for, it may be necessary to enable IRQ passing to DOS.
|
|
Note that IRQ passing does not work on x86-64.
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_irqpassing = "" # list of IRQ number (2-15) to pass to DOS such as
|
|
# "3 8 10"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN345"
|
|
>2.1.15. Video settings ( console only )</A
|
|
></H4
|
|
><P
|
|
><SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>!!WARNING!!: IF YOU ENABLE GRAPHICS ON AN INCOMPATIBLE ADAPTOR,
|
|
YOU COULD GET A BLANK SCREEN OR MESSY SCREEN EVEN AFTER EXITING DOSEMU.
|
|
Read doc/README-tech.txt (Recovering the console after a crash).</I
|
|
></SPAN
|
|
></P
|
|
><P
|
|
>Start with only text video using the following setup</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_video = "vga" # one of: plainvga, vga, ega, mda, mga, cga
|
|
$_console = (0) # use 'console' video
|
|
$_graphics = (0) # use the cards BIOS to set graphics
|
|
$_vbios_seg = (0xc000) # set the address of your VBIOS (e.g. 0xe000)
|
|
$_vbios_size = (0x10000)# set the size of your BIOS (e.g. 0x8000)
|
|
$_vmemsize = (0) # amount of video RAM to save/restore
|
|
$_chipset = ""
|
|
$_dualmon = (0) # if you have one vga _plus_ one hgc (2 monitors)</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>After you get it `somehow' working and you have one of the DOSEMU supported
|
|
graphic cards you may switch to graphics mode changing the below</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_graphics = (1) # use the cards BIOS to set graphics</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>If you have a 100% compatible standard VGA card that <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>may</I
|
|
></SPAN
|
|
> work,
|
|
however, you get better results, if your card has one of the DOSEMU supported
|
|
video chips and you tell DOSEMU to use it such as</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_chipset = "s3" # one of: plainvga, trident, et4000, diamond, s3,
|
|
# avance, cirrus, matrox, wdvga, paradise, ati, sis,
|
|
# svgalib, vesa</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>Note, `s3' is only an example, you <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>must</I
|
|
></SPAN
|
|
> set the correct video chip
|
|
else it most like will crash your screen.</P
|
|
><P
|
|
>The 'svgalib' setting uses svgalib 1.9.21 or greater for determining the correct
|
|
video chip.</P
|
|
><P
|
|
>The 'vmemsize' setting's default of 0 causes DOSEMU to try to autodetect
|
|
the amount of video memory on the graphics card. This amount is saved
|
|
and restored when you switch away from and back to the virtual console DOSEMU
|
|
runs in using the Ctrl-Alt-Fn key combination. Since saving video
|
|
memory can be a very slow operation you may want to restrict 'vmemsize'
|
|
to a value that was more common when DOS was still mainstream. For instance
|
|
1024 covers it if you want to be able to save and restore modes up to
|
|
1024x768x256.</P
|
|
><P
|
|
>NOTE: `video setting' can <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>not</I
|
|
></SPAN
|
|
> be overwritten by ~/.dosemurc.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN365"
|
|
>2.1.16. Time settings</A
|
|
></H4
|
|
><P
|
|
>By Paul Crawford. This is a short guide to the time modes supported in
|
|
DOSEMU; you can get
|
|
a more detailed description of how and why they operate at
|
|
<A
|
|
HREF="http://www.sat.dundee.ac.uk/~psc/dosemu_time_advanced.html"
|
|
TARGET="_top"
|
|
>http://www.sat.dundee.ac.uk/~psc/dosemu_time_advanced.html</A
|
|
>. There are three modes currently supported
|
|
using the $_timemode variable:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_timemode = "bios"
|
|
$_timemode = "pit"
|
|
$_timemode = "linux"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
Most users will only ever have a need for either BIOS or LINUX mode,
|
|
and the decision comes down to the two basic characteristics:
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
>In BIOS mode, the DOSEMU session begins with the current (local)
|
|
date & time, and once running it behaves fully like an emulated PC.
|
|
You can set the date & time using the normal DOS methods as you would expect.
|
|
However, time keeping accuracy in the long term under DOS was never very good,
|
|
and under DOSEMU it is typically poorer.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>In LINUX mode, the emulated PC always reports the current host time,
|
|
and so you no longer have the option to set the DOS time (the date can be
|
|
set, which is odd, as this is kept in DOS and not in the emulator). In
|
|
this mode you get the long term accuracy of the host, so if you are
|
|
running NTP or similar, you always get accurate time.</P
|
|
></LI
|
|
></UL
|
|
>
|
|
|
|
The PIT mode is an odd compromise, it provides BIOS-like time
|
|
(settable, decoupled from host time), but with slightly higher
|
|
accuracy. In summary, if you need accurate time, choose LINUX mode,
|
|
otherwise if you need time setting capabilities or close 'real' PC
|
|
emulation, choose BIOS mode.</P
|
|
><P
|
|
>A reasonable question for some applications is
|
|
"how do I get accurate UTC time?", of course, the more general question is
|
|
about running the emulated DOS session in a different timezone and/or with
|
|
differing "daylight saving" options to the host computer.
|
|
This is quite simple in fact, just start DOSEMU with the environment
|
|
variable TZ set to the required zone, and don't forget to have the
|
|
corresponding command in the DOS autoexec.bat file (otherwise
|
|
Microsoft products all assume -8 hours PST!). The DOSEMU emulation
|
|
of file system access is also based on the local timezone it is running in,
|
|
so you will get consistent file time stamps compared to the emulated time.
|
|
So in the UTC case, you would start DOSEMU in a shell with TZ=GMT0, and
|
|
have a line in autoexec.bat with "set TZ=GMT0" before any of your programs
|
|
are run.</P
|
|
></DIV
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN376"
|
|
>3. Security</A
|
|
></H2
|
|
><P
|
|
>This part of the document by Hans Lermen,
|
|
<A
|
|
HREF="mailto:lermen@fgan.de"
|
|
TARGET="_top"
|
|
><lermen@fgan.de></A
|
|
>
|
|
on Apr 6, 1997.</P
|
|
><P
|
|
>These are the hints we give you, when running dosemu on a machine that is
|
|
(even temporary) connected to the internet or other machines, or that
|
|
otherwise allows 'foreign' people login to your machine.</P
|
|
><P
|
|
> <P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
>Don't set the "s" bit, as DOSEMU can run in
|
|
lowfeature mode without the "s" bit set. If you want fullfeatures
|
|
for some of your users, it is recommended to use "sudo". Alternatively
|
|
you can just use the keyword `nosuidroot' in
|
|
/etc/dosemu.users to forbid some (or all) users execution of
|
|
a suid root running dosemu (they may use a non-suid root copy of
|
|
the binary though).
|
|
DOSEMU now drops its root privileges before booting; however
|
|
there may still be security problems in the initialization code,
|
|
and by making DOSEMU suid-root you can give users direct access to
|
|
resources they don't normally have access too, such as selected I/O
|
|
ports, hardware IRQs and hardware RAM.
|
|
For any direct hardware access you must always use the "-s" switch.</P
|
|
><P
|
|
>If DOSEMU is invoked via "sudo" then it will automatically switch to
|
|
the user who invoked "sudo". An example /etc/sudoers entry is this:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> joeuser hostname=(root) NOPASSWD: /usr/local/bin/dosemu.bin</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
If you use PASSWD instead of NOPASSWD then users need to type their
|
|
own passwords when sudo asks for it. The "dosemu" script can be
|
|
invoked using the "-s" option to automatically use sudo.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Use proper file permissions to restrict access to a
|
|
suid root DOSEMU binary in addition to /etc/dosemu.users `nosuidroot'.
|
|
( double security is better ).</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>NEVER</I
|
|
></SPAN
|
|
> let foreign users execute dosemu under root login !!!
|
|
(Starting with dosemu-0.66.1.4 this isn't necessary any more,
|
|
all functionality should also be available when running as user)</P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN392"
|
|
>4. Sound</A
|
|
></H2
|
|
><P
|
|
>The SB code is currently in a state of flux. Some changes to the code have been
|
|
made which mean that I can separate the DSP handling from the rest of the SB
|
|
code, making the main case statements simpler. In the meantime, Rutger
|
|
Nijlunsing has provided a method for redirecting access to the MPU-401 chip
|
|
into the main OS. </P
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN395"
|
|
>4.1. Using the MPU-401 "Emulation"</A
|
|
></H3
|
|
><P
|
|
>The Sound driver opens "/var/run/dosemu-midi" and
|
|
writes the Raw MIDI data to this. A daemon is provided which can be can be used
|
|
to seletc the instruments required for use on some soundcards. It is also
|
|
possible to get various instruments by redirecting '/var/run/dosemu-midi' to
|
|
the relevant part of the sound driver eg:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> % ln -s /dev/midi /var/run/dosemu-midi</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>This will send all output straight to the default midi device and use whatever
|
|
instruments happen to be loaded.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN401"
|
|
>4.2. The MIDI daemon</A
|
|
></H3
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> make midid</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>This compiles and installs the midi daemon. The daemon currently has support
|
|
for the 'ultra' driver and partial support for the 'OSS' driver (as supplied
|
|
with the kernel) and for no midi system. Support for the 'ultra' driver will
|
|
be compiled in automatically if available on your system.</P
|
|
><P
|
|
>Copy the executable './bin/midid' so that it is on your path, or somewhere you
|
|
can run it easily.</P
|
|
><P
|
|
>Before you run DOSEMU for the first time, do the following:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> mkdir -p ~/.dosemu/run # if it doesen't exist
|
|
rm -f ~/.dosemu/run/dosemu-midi
|
|
mknod ~/.dosemu/run/dosemu-midi p</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>Then you can use the midi daemon like this:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> ./midid < ~/.dosemu/run/dosemu-midi &; dosemu</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>(Assuming that you put the midid executeable in the directory you run DOSEMU
|
|
from.) </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN412"
|
|
>4.3. Disabling the Emulation at Runtime</A
|
|
></H3
|
|
><P
|
|
>You can disable the SB emulation by changing the 'sound' variable in
|
|
/etc/dosemu.conf to 'off'. There is currently no way to specify at runtime
|
|
which SB model DOSEMU should emulate; the best you can do is set the T value
|
|
of the BLASTER environment variable (see sound-usage.txt), but not all
|
|
programs will take note of this.</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="LREDIR"
|
|
>5. Using Lredir</A
|
|
></H2
|
|
><P
|
|
>This section of the document by Hans,
|
|
<A
|
|
HREF="mailto:lermen@fgan.de"
|
|
TARGET="_top"
|
|
><lermen@fgan.de></A
|
|
>. Last
|
|
updated on October, 23 2002.</P
|
|
><P
|
|
>What is it? Well, its simply a small DOS program that tells the
|
|
MFS (Mach File System) code what 'network' drives to redirect.
|
|
With this you can 'mount' any Linux directory as a virtual drive
|
|
into DOS. In addition to this, Linux as well as multiple dosemu sessions
|
|
may simultaneously access the same drives, what you can't when using
|
|
partition access.</P
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN420"
|
|
>5.1. how do you use it?</A
|
|
></H3
|
|
><P
|
|
>Mount your dos hard disk partition as a Linux subdirectory.
|
|
For example, you could create a directory in Linux such as /dos (mkdir
|
|
-m 755 /dos) and add a line like</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> /dev/hda1 /dos msdos umask=022</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>to your /etc/fstab. (In this example, the hard disk is mounted read-
|
|
only. You may want to mount it read/write by replacing "022" with
|
|
"000" and using the -m 777 option with mkdir). Now mount /dos. Now
|
|
you can add a line like</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> lredir d: linux\fs/dos</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>to the AUTOEXEC.BAT file in your hdimage (but see the comments
|
|
below). On a multi-user system you may want to use</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> lredir d: linux\fs\${home}</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>where "home" is the name of an environmental variable that contains
|
|
the location of the dos directory (/dos in this example)</P
|
|
><P
|
|
>You may even redirect to a NFS mounted volume on a remote machine with
|
|
a /etc/fstab entry like this
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> otherhost: /dos nfs nolock</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
Note that the <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>nolock</I
|
|
></SPAN
|
|
>> option might be
|
|
<SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>needed</I
|
|
></SPAN
|
|
> for 2.2.x kernels, because
|
|
apparently the locks do not propagate fast enough and DOSEMU's (MFS code)
|
|
share emulation will fail (seeing a lock on its own files).</P
|
|
><P
|
|
>In addition, you may want to have your native DOS partion as C: under dosemu.
|
|
To reach this aim you also can use Lredir to turn off the 'virtual'
|
|
hdimage and switch on the <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>real</I
|
|
></SPAN
|
|
> drive C: such as this:</P
|
|
><P
|
|
>Assuming you have a c:\dosemu directory on both drives (the virtual
|
|
and the real one) <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>and</I
|
|
></SPAN
|
|
> have mounted your DOS partition as /dosc,
|
|
you then should have the following files on the virtual drive:</P
|
|
><P
|
|
>autoexec.bat:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> lredir z: linux\fs\dosc
|
|
copy c:\dosemu\auto2.bat z:\dosemu\auto2.bat
|
|
lredir del z:
|
|
c:\dosemu\auto2.bat</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>dosemu\auto2.bat:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> lredir c: linux\fs\dosc
|
|
rem further autoexec stuff</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>To make the reason clear <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>why</I
|
|
></SPAN
|
|
> the batch file (not necessaryly autoexec.bat)
|
|
<SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>must</I
|
|
></SPAN
|
|
> be identical:</P
|
|
><P
|
|
>Command.com, which interpretes the batchfile keeps a position pointer
|
|
(byte offset) to find the next line within this file. It opens/closes the
|
|
batchfile for <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>every</I
|
|
></SPAN
|
|
> new batchline it reads from it.
|
|
If the batchfile in which the 'lredir c: ...' happens is on c:, then
|
|
command.com suddenly reads the next line from the batchfile of that
|
|
newly 'redired' drive. ... you see what is meant?</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN451"
|
|
>5.2. Other alternatives using Lredir</A
|
|
></H3
|
|
><P
|
|
>To have a redirected drive available at time of config.sys you may
|
|
either use emufs.sys such as</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> device=c:\emufs.sys /dosc</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>or make use of the install instruction of config.sys (but not both) such as</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> install=c:\lredir.exe c: linux\fs\dosc</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>The later has the advantage, that you are on your native C: from the
|
|
beginning, <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>but</I
|
|
></SPAN
|
|
>, as with autoexec.bat, both config.sys must be identical.</P
|
|
><P
|
|
>
|
|
For information on using 'lredired' drives as a 'user' (ie having the right
|
|
permissions), please look at the section on Running dosemu as a normal user.</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="RUNASUSER"
|
|
>6. Running dosemu as a normal user</A
|
|
></H2
|
|
><P
|
|
>This section of the document by Hans,
|
|
<A
|
|
HREF="mailto:lermen@fgan.de"
|
|
TARGET="_top"
|
|
><lermen@fgan.de></A
|
|
>. Last
|
|
updated on Jan 21, 2003.</P
|
|
><P
|
|
> <P
|
|
></P
|
|
><OL
|
|
TYPE="1"
|
|
><LI
|
|
><P
|
|
>In the default setup, DOSEMU does not have root privileges. This means it
|
|
will not have direct access to ports, external DOSish hardware and won't
|
|
use the console other than in normal terminal mode, but is fully capable
|
|
to do anything else. See the previous section on how to enable privileged
|
|
operation if you really need to.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>If a user needs access to privileged resources other than console graphics,
|
|
then you may need to explicitly allow the user to do so by editing the file
|
|
/etc/dosemu.users (or /etc/dosemu/dosemu.users).
|
|
The format is:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> loginname [ c_strict ] [ classes ...] [ other ]</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>For example, to allow joeuser full access you can use
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> joeuser c_all</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
></P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> The msdos partitions, that you want to be accessable through
|
|
<A
|
|
HREF="#LREDIR"
|
|
>Section 5</A
|
|
> should
|
|
be mounted with proper permissions. I recommend doing this via 'group's,
|
|
not via user ownership. Given you have a group 'dosemu' for this and want
|
|
to give the user 'lermen' access, then the following should be</P
|
|
><P
|
|
> <P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> in /etc/passwd:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> lermen:x:500:100:Hans Lermen:/home/lermen:/bin/bash
|
|
^^^-- note: this is NOT the group id of 'dosemu'</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> in /etc/group:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> users:x:100:
|
|
dosemu:x:200:dosemu,lermen
|
|
^^^</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> in /etc/fstab:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> /dev/hda1 /dosc msdos defaults,gid=200,umask=002 0 0
|
|
^^^</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
><P
|
|
><SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>Note:</I
|
|
></SPAN
|
|
> the changes to /etc/passwd and /etc/group only take place the
|
|
<SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>next</I
|
|
></SPAN
|
|
> time you login, so don't forget to re-login.</P
|
|
><P
|
|
>The fstab entry will mount /dosc such that is has the proper permissions
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> ( drwxrwxr-x 22 root dosemu 16384 Jan 1 1970 /dosc )</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>You can do the same with an explicit mount command:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> mount -t msdos -o gid=200,umask=002 /dev/hda1 /dosc </PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>Of course normal lredir'ed unix directories should have the same
|
|
permissions.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Make sure you have read/write permissions of the devices you
|
|
configured (in /etc/dosemu.conf) for serial and mouse.</P
|
|
></LI
|
|
></OL
|
|
> </P
|
|
><P
|
|
>Starting with dosemu-0.66.1.4 there should be no reason against running
|
|
dosemu as a normal user. The privilege stuff has been extensively reworked,
|
|
and there was no program that I tested under root, that didn't also run
|
|
as user. Normally dosemu will permanently run as user and only temporarily
|
|
use root privilege when needed (during initialization) and then drop its
|
|
root privileges permanently. In case of non-suid root
|
|
(as of dosemu-0.97.10), it will run in lowfeature mode without any privileges.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="CDROM"
|
|
>7. Using CDROMS</A
|
|
></H2
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN503"
|
|
>7.1. The built-in driver</A
|
|
></H3
|
|
><P
|
|
>This documents the cdrom extension rucker@astro.uni-bonn.de has
|
|
written for Dosemu.</P
|
|
><P
|
|
>An easy way to access files on a CDROM is to mount it in Linux and use
|
|
Lredir to refer to it. However, any low-level access, often used by
|
|
games is impossible that way, unless you use the C option.
|
|
For that you need to load some drivers in DOS. CDROM image files (ISOs)
|
|
can be used in a similar fashion.</P
|
|
><P
|
|
>The driver consists of a server on the Linux side
|
|
(src/dosext/drivers/cdrom.c, accessed via int 0xe6 handle 0x40) and a
|
|
device driver (src/commands/cdrom.S) on the DOS side.</P
|
|
><P
|
|
>Please send any suggestions and bug reports to <A
|
|
HREF="mailto:rucker@astro.uni-bonn.de"
|
|
TARGET="_top"
|
|
><rucker@astro.uni-bonn.de></A
|
|
></P
|
|
><P
|
|
>To install it:
|
|
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> Create a (symbolic) link /dev/cdrom to the device file of your drive
|
|
or use the cdrom statement in dosemu.conf to define it.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Make sure that you have read/write access to the device file of your
|
|
drive, otherwise you won't be able to use the cdrom under Dosemu
|
|
directly because of security reasons.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Load cdrom.sys within your config.sys file with e.g.:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> devicehigh=d:\dosemu\cdrom.sys</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>Mount the CD-ROM in Linux (some distributions do this automatically), and
|
|
use</P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> lredir e: linux\fs/media/cdrom c</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><P
|
|
>to access the CD-ROM as drive E:. The "C" option specifies that the
|
|
low-level access provided via cdrom.sys is used. Or ...
|
|
start Microsoft cdrom extension as follows:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> mscdex /d:mscd0001 /l:driveletter</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
or
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> shsucdex /d:mscd0001 /l:driveletter</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
><P
|
|
>To change the cd while Dosemu is running, use the DOS program 'eject.com'.
|
|
If is not possible to change the disk, when the drive has been opened by
|
|
another process (e.g. mounted), then you need to unmount it first!</P
|
|
><P
|
|
>Lredir has the advantage of supporting long file names, and not using
|
|
any DOS memory, whereas MS/SHSUCDX are more low-level and perhaps more
|
|
compatible. You would need to use a DOS TSR driver such as DOSLFN to
|
|
use long file names with SHSUCDX.</P
|
|
><P
|
|
>Remarks by zimmerma@rz.fht-esslingen.de:</P
|
|
><P
|
|
>This driver has been successfully tested with Linux' SCSI CDROMS by the
|
|
author, with the Mitsumi driver mcd.c and with the Aztech/Orchid/Okano/Wearnes-
|
|
CDROM driver aztcd.c by me. With the latter CDROM-drives changing the CD-ROM
|
|
is not recognized correctly by the drive under all circumstances and is
|
|
therefore disabled. So eject.com will not work.
|
|
For other CD-ROM drives you may enable this feature by setting the variable
|
|
'eject_allowed = 1' in file dosemu/drivers/cdrom.c (you'll find it near the
|
|
top of the file). With the mcd.c and aztcd.c Linux drivers this may cause your
|
|
system to hang for some 30 seconds (or even indefinitely), so don't change the
|
|
default value 'eject_allowed = 0'.</P
|
|
><P
|
|
>Support for up to 4 drives:</P
|
|
><P
|
|
>If you have more then one cdrom, you can use the cdrom statement
|
|
in dosemu.conf like this:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_cdrom = "/dev/cdrom /dev/cdrom2 image.iso"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
and have multiple instancies of the DOS driver:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> device=cdrom.sys
|
|
device=cdrom.sys 2
|
|
device=cdrom.sys 3</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>The one and only parameter to the device driver is a digit between 1 and 4,
|
|
(if its missing then 1 is assumed)
|
|
for the DOS devices MSCD0001, MSCD0002 ... MSCD0004 respectively. You then
|
|
also need to use lredir or tell MSCDEX about these drivers such as
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
>
|
|
lredir e: linux\fs/media/cdrom c
|
|
lredir f: linux\fs/media/cdrom2 c 2
|
|
lredir g: linux\fs/media/cdrom3 c 3</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
where you need to loop-mount the image file, or
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
>
|
|
mscdex /d:mscd0001 /d:mscd0002 /l:driveletter</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
|
|
In this case the /l: argument defines the driveletter of the first /d:,
|
|
the others will get assigned successive driveletters.</P
|
|
><P
|
|
>History:</P
|
|
><P
|
|
>Release with dosemu.0.60.0
|
|
Karsten Rucker (rucker@astro.uni-bonn.de)
|
|
April 1995 </P
|
|
><P
|
|
>Additional remarks for mcd.c and aztcd.c
|
|
Werner Zimmermann (zimmerma@rz.fht-esslingen.de)
|
|
May 30, 1995</P
|
|
><P
|
|
>Release with dosemu-0.99.5
|
|
Manuel Villegas Marin (manolo@espanet.com)
|
|
Support for up to 4 drives
|
|
December 4, 1998</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN542"
|
|
>8. Using X</A
|
|
></H2
|
|
><P
|
|
>This chapter provides some hints and tips for using DOSEMU in X.</P
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN545"
|
|
>8.1. Basic information</A
|
|
></H3
|
|
><P
|
|
>If you start <B
|
|
CLASS="COMMAND"
|
|
>dosemu</B
|
|
> in X it brings up its own window,
|
|
in which you can
|
|
also execute graphical programs such as games. To force text-only execution
|
|
of DOSEMU in an xterm or other terminal (konsole, gnome-terminal, and so on),
|
|
you need to run <B
|
|
CLASS="COMMAND"
|
|
>dosemu -t</B
|
|
>.</P
|
|
><P
|
|
>Use <B
|
|
CLASS="COMMAND"
|
|
>dosemu -w</B
|
|
> to start DOSEMU in fullscreen mode.
|
|
When running DOSEMU,
|
|
you can flip between fullscreen and windowed mode by pressing
|
|
<Ctrl><Alt><F>.
|
|
The graphics window is resizeable.</P
|
|
><P
|
|
>Some DOS applications want precise mouse control that is only possible
|
|
if the mouse cursor is trapped in the DOSEMU window. To enable this you
|
|
need to grab the mouse by pressing <Ctrl><Alt><Home>.
|
|
Similarly, you can grab the keyboard by pressing
|
|
<Ctrl><Alt><K>, or
|
|
<Ctrl><Alt><Shift><K> if your
|
|
window manager already grabs <Ctrl><Alt><K>.
|
|
After you grab the keyboard
|
|
all key combinations (including <Alt><Tab> and so on)
|
|
are passed to DOSEMU.
|
|
In fullscreen mode the mouse and keyboard are both automatically grabbed.</P
|
|
><P
|
|
>Use <Ctrl><Alt><Pause> to pause and unpause
|
|
the DOSEMU session, which is useful if you want it to sit silently
|
|
in the background when it is eating too much CPU time.
|
|
Press <Ctrl><Alt><PgDn> or click the close button
|
|
of the window to exit DOSEMU.</P
|
|
><P
|
|
>DOSEMU uses bitmapped internal fonts by default, so it can accurately
|
|
simulate a real VGA card text mode. It is also possible to use X fonts.
|
|
The advantages of these is that they may be easier on the eyes, and
|
|
are faster, in particular if you use DOSEMU remotely. Any native DOS font
|
|
setting utilities do not work, however. To set an X font use the
|
|
provided xmode.com utility, using
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> xmode -font vga</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
at the DOS prompt or
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_X_font = "vga"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
in dosemu.conf. The provided fonts are vga, vga8x19, vga11x19, vga10x24,
|
|
vga12x30, vga-cp866, and vga10x20-cp866.</P
|
|
><P
|
|
>If the mouse is not grabbed, then you can copy and paste text if the DOSEMU
|
|
window is in text mode. This uses the standard X mechanism: select by
|
|
dragging the left mouse button, and paste by pressing the middle mouse
|
|
button.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN558"
|
|
>8.2. More detailed information, hints and tips</A
|
|
></H3
|
|
><P
|
|
>What you might take care of:</P
|
|
><P
|
|
> <P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
>If backspace and delete do not work, you can try
|
|
'xmodmap -e "keycode 22 = 0xff08"' to get use of your backspace key, and</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> 'xmodmap -e "keycode 107 = 0xffff"' to get use of your delete key.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Make sure DOSEMU has X support compiled in. The configure script
|
|
complains loudly if it does not find X development libraries.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> There are some X-related configuration options for dosemu.conf.
|
|
See the file itself for details.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Keyboard support of course depends on your X keyboard mappings (xmodmap).
|
|
If certain keys don't work (like Pause, Backspace,...), it *might* be
|
|
because you haven't defined them in your xmodmap, or defined to something
|
|
other than DOSEMU expects.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> using the provided icon (dosemu.xpm):</P
|
|
><P
|
|
> <P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> you need the xpm (pixmaps) package. If you're not sure, look for
|
|
a file like /usr/X11R6/lib/libXpm.so.*</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> you also need a window manager which supports pixmaps. Fvwm is fine,
|
|
but I can't tell you about others. Twm probaby won't do.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> copy dosemu.xpm to where you usually keep your pixmap (not bitmap!)
|
|
files (perhaps /usr/share/pixmaps)</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>tell your window manager to use it. For fvwm, add the following
|
|
line to your fvwmrc file:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
>
|
|
Icon "xdosemu" dosemu.xpm</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>This assumes you have defined a PixmapPath. Otherwise, specify the
|
|
entire pathname.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> note that if you set a different icon name than "xdosemu" in your
|
|
dosemu.conf, you will also have to change the fvwmrc entry.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> restart the window manager. There's usually an option in the
|
|
root menu to do so.</P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
><P
|
|
>Now you should see the icon whenever you iconify xdosemu.</P
|
|
><P
|
|
>Note that the xdosemu program itself does not include the icon - that's
|
|
why you have to tell the window manager. I chose to do it this way
|
|
to avoid xdosemu <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>requiring</I
|
|
></SPAN
|
|
> the Xpm library.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> If anything else does not work as expected, don't panic :-)
|
|
Remember the thing is still under construction.
|
|
However, if you think it's a real bug, please tell me.</P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN597"
|
|
>8.3. The VGA Emulator</A
|
|
></H3
|
|
><P
|
|
>In X, a VGA card is emulated. The same happens if you use the SDL library
|
|
using <B
|
|
CLASS="COMMAND"
|
|
>dosemu -S</B
|
|
>. This emulation (vgaemu) enables
|
|
X to run graphics modes.</P
|
|
><P
|
|
>Some features:
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> Video memory. 1 Mb is allocated. It is mapped with mmap() in the VGA
|
|
memory region of DOSEMU (0xa00000-0xbfffff) to support bank switching.
|
|
This is very i386-Linux specific, don't be surprised if it doesn't work
|
|
under NetBSD or another Linux flavour (Alpha/Sparc/MIPS/etc).</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> The DAC (Digital to Analog Converter). The DAC is completely emulated,
|
|
except for the pelmask. This is not difficult to implement, but it is
|
|
terribly slow because a change in the pelmask requires a complete redraw
|
|
of the screen. Fortunately, the pelmask changes aren't used often so
|
|
nobody will notice ;-)</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> The attribute controller is emulated.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> The emulator emulates a basic Trident TVGA8900C graphics card.
|
|
All standard VGA modes are emulated, most VGA hardware features (mode-X,
|
|
320x240 and so on), some Trident extensions, and on
|
|
top of that many high-resolution VESA 2.0 modes, that were not present
|
|
in the original Trident card.
|
|
Some (very few) programs, such as Fast Tracker, play intimately with the
|
|
VGA hardware and may not work. As vgaemu improves these problems should
|
|
disappear.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Nearly full VESA 2.0 support.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> A VESA compatible video BIOS is mapped at 0xc00000. It is small because
|
|
it only contains some glue code and the BIOS fonts (8x8, 8x14, 8x16).</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> support for hi- and true-color modes (using Trident SVGA mode numbers
|
|
and bank switching)</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Support for mode-X type graphics modes (non-chain4 modes as used by e.g. DOOM)</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> gamma correction for graphics modes</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> video memory size is configurable via dosemu.conf</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> initial graphics window size is configurable</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>The current hi- (16bpp) and true (24/32bpp) color support does
|
|
not allow resizing of the graphics window and gamma correction
|
|
is ignored.</P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
><P
|
|
>As the typical graphics mode with 320x200x8 will be used often
|
|
with large scalings and modern graphics boards are pretty fast,
|
|
Steffen Winterfeldt added something to eat up your CPU time: you can turn on
|
|
the bilinear interpolation. It greatly improves the display
|
|
quality (but is rather slow as I haven't had time yet to implement
|
|
an optimized version - it's plain C for now).
|
|
If the bilinear filter is too slow, you might instead try the linear
|
|
filter which interpolates only horizontally.</P
|
|
><P
|
|
>Note that (bi)linear filtering is not available on all
|
|
VGA/X display combinations. The standard drawing routines
|
|
are used instead in such cases.</P
|
|
><P
|
|
>If a VGA mode is not supported on your current X display, the graphics
|
|
screen will just remain black. Note that this <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>does not</I
|
|
></SPAN
|
|
> mean
|
|
that DOSEMU has crashed.</P
|
|
><P
|
|
>The only unsupported VBE function is VGA state save/restore. But this
|
|
functionality is rarely used and its lack should not cause
|
|
too much problems.</P
|
|
><P
|
|
>VBE allows you to use the horizontal and vertical scrolling
|
|
function even in text modes. This feature is not implemented.</P
|
|
><P
|
|
>If you think it causes problems, the linear frame buffer (LFB)
|
|
can be turned of via dosemu.conf as well as the protected mode
|
|
interface. Note, however, that LFB modes are faster than
|
|
banked modes, even in DOSEMU.</P
|
|
><P
|
|
>The default VBE mode list defines a lot of medium resolution
|
|
modes suitable for games (like Duke3D). You can still
|
|
create your own modes via dosemu.conf. Note that you
|
|
cannot define the same mode twice; the second (and all
|
|
subsequent) definitions will be ignored.</P
|
|
><P
|
|
>Modes that are defined but cannot be supported due
|
|
to lack of video memory or because they cannot be
|
|
displayed on your X display, are marked as unsupported
|
|
in the VBE mode list (but are still in it).</P
|
|
><P
|
|
>The current interface between VGAEmu and X will try to update
|
|
all invalid video pages at a time. This may, particularly
|
|
in hi-res VBE/SVGA modes, considerably disturb DOSEMU's signal
|
|
handling. That cannot be helped for the moment, but will
|
|
be addressed soon (by running an extra update thread).</P
|
|
><P
|
|
>If you really think that this is the cause of your problem, you might
|
|
try to play with veut.max_max_len in env/video/render.c.
|
|
This variable limits the amount of video memory that is updated
|
|
during one timer interrupt. This way you can dramatically
|
|
reduce the load of screen updates, but at the same rate reduce your
|
|
display quality.</P
|
|
><P
|
|
>Gamma correction works in both 4 and 8 bit modes. It must be specified
|
|
as a float value, e.g. $_X_gamma=(1.0). Higher values
|
|
give brighter graphics, lower make them darker. Reasonable
|
|
values are within a range of 0.5 ... 2.0.</P
|
|
><P
|
|
>You can specify the video memory size that the VGA emulator
|
|
should use in dosemu.conf. The value will be rounded up
|
|
to the nearest 256 kbyte boundary. You should stick to typical
|
|
values like 1024, 2048 or 4096 as not to confuse DOS applications.
|
|
Note that whatever value you give, 4 bit modes are only
|
|
supported up to a size of 800x600.</P
|
|
><P
|
|
>You can influence the initial size of the graphics window in various
|
|
ways. Normally it will have the same size (in pixel) as the VGA graphics
|
|
mode, except for mode 0x13 (320x200, 256 colors), which will be scaled by
|
|
the value of <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>mode13fact</I
|
|
></SPAN
|
|
> (defaults to 2).
|
|
Alternatively, you can directly specify a window size in dosemu.conf via
|
|
<SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>$_X_winsize</I
|
|
></SPAN
|
|
>. You can still resize the window later.</P
|
|
><P
|
|
>The config option <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>$_X_fixed_aspect</I
|
|
></SPAN
|
|
> allows you to fix the aspect ratio
|
|
of the graphics window while resizing it. Alternatively, <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>$_X_aspect_43</I
|
|
></SPAN
|
|
>
|
|
ties the aspect ratio to a value of 4:3. The idea behind this is that, whatever
|
|
the actual resolution of a graphics mode is in DOS, it is displayed on
|
|
a 4:3 monitor. This way you won't run into problems with modes such
|
|
as 640x200 (or even 320x200) which would look somewhat distorted otherwise.</P
|
|
><P
|
|
>For planar modes (for instance, most 16 colour modes, but also certain
|
|
256-colour modes: mode-X), vgaemu has to
|
|
switch to partial cpu emulation. This can be slow, but expect it to
|
|
improve over time.</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="WINDOWS"
|
|
>9. Running Windows under DOSEMU</A
|
|
></H2
|
|
><P
|
|
>DOSEMU can run any 16bit Windows up to 3.1, and has limited
|
|
support for Windows 3.11. You should be able to install and run
|
|
these versions of Windows without any extra work. There are still
|
|
a few caveats however, and if you have some problems, read on.</P
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN650"
|
|
>9.1. Mouse in Windows under DOSEMU</A
|
|
></H3
|
|
><P
|
|
>In Windows, the mouse cursor is not always in sync with the native X
|
|
mouse cursor. This problem can be easily avoided by enabling mouse grab.
|
|
There also exist an
|
|
<A
|
|
HREF="https://depot.javispedro.com/vbox/vbados/vbados.zip"
|
|
TARGET="_top"
|
|
>alternative mouse driver</A
|
|
>
|
|
specially written to work in ungrabbed mode under many emulators or
|
|
on a real machine.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN654"
|
|
>9.2. Windows 3.x in SVGA modes</A
|
|
></H3
|
|
><P
|
|
>If you want to run Windows in SVGA mode, you can either use the
|
|
Trident drivers, or the patched SVGA drivers of Windows 3.11.</P
|
|
><P
|
|
>The Trident drivers for Windows are in the files tvgaw31a.zip
|
|
and/or tvgaw31b.zip. Search www.winsite.com to get them.
|
|
Unpack the archive. In Windows setup, install the
|
|
Trident "800x600 256 color for 512K boards" driver.</P
|
|
><P
|
|
>Windows 3.11 comes with SVGA drivers. You can also download
|
|
them: search www.winsite.com for svga.exe and install the drivers.
|
|
Then go to
|
|
<A
|
|
HREF="http://www.japheth.de/dwnload1.html"
|
|
TARGET="_top"
|
|
>http://www.japheth.de/dwnload1.html</A
|
|
>
|
|
and get the SVGAPatch tool. This tool causes the above drivers to
|
|
work with most of the video cards in a real DOS environment, and
|
|
makes them DOSEMU-compatible too.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN660"
|
|
>9.3. VxD support</A
|
|
></H3
|
|
><P
|
|
>By the time of writing this, DOSEMU does not have support
|
|
for Windows ring-0 device drivers (.vxd, .386). Fortunately, most of
|
|
Windows 3.1 drivers are ring-3 ones (.drv), so you can easily
|
|
install the Sound Blaster drivers, for instance. This is not the
|
|
case with Windows 3.11. Its network drivers are ring-0 ones, so
|
|
the native Winsock does not work. In order to get networking
|
|
operational, you need to get the Trumpet Winsock package. Refer
|
|
to chapter "Using Windows and Winsock" for more info on this.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN663"
|
|
>9.4. DOS shell in Windows</A
|
|
></H3
|
|
><P
|
|
>There is probably little use of a DOS shell under Windows under
|
|
DOSEMU... But for those who need it, here are some basic hints.
|
|
The DOS shell is supported by DOSEMU only if Windows is running in
|
|
Standard mode. The Enhanced mode DOS shell is currently unsupported.
|
|
Note however, that unlike in a real DOS environment, under DOSEMU
|
|
the DOS shell of the Windows in Standard mode allows you to run
|
|
protected mode applications (in the real DOS environment only the DOS shell
|
|
of the Enhanced mode allows this).</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="MOUSE"
|
|
>10. The DOSEMU mouse</A
|
|
></H2
|
|
><P
|
|
>This section written by Eric Biederman <CODE
|
|
CLASS="EMAIL"
|
|
><<A
|
|
HREF="mailto:eric@dosemu.org"
|
|
>eric@dosemu.org</A
|
|
>></CODE
|
|
></P
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN670"
|
|
>10.1. Setting up the emulated mouse in DOSEMU</A
|
|
></H3
|
|
><P
|
|
>For most dos applications you should be able to use the
|
|
internal mouse with very little setup, and very little trouble.</P
|
|
><P
|
|
>Under X, or in terminal mode, you don't need to do anything, unless you want
|
|
to use the middle button then you need to add to autoexec.bat:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> emumouse 3</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
On the console, in text mode, without root, the GPM library can be used,
|
|
and no extra setup is necessary.
|
|
Otherwise, especially with console graphics (sudo/suid/root, the -s switch,
|
|
and $_graphics=(1)), it takes just a tad bit more work:</P
|
|
><P
|
|
>in dosemu.conf:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_mouse = "mousesystems"
|
|
$_mouse_dev = "/dev/gpmdata"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
And in autoexec.bat:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> emumouse 3</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
This sets you up to use the gpm mouse repeater if you don't
|
|
use the repeater, you need to set $_mouse and $_mouse_dev to
|
|
different values.
|
|
|
|
The GPM repeater might be configured to use a different protocol
|
|
than the default. If you are having problems, check the 'repeat_type' setting
|
|
in your gpm.conf. These are the mappings from the GPM repeat_type to the
|
|
DOSEMU $_mouse for common settings:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> GPM setting DOSEMU setting
|
|
-------------------------------
|
|
msc (default) mousesystems
|
|
ms3 microsoft
|
|
raw select type of your real mouse</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN679"
|
|
>10.2. Problems</A
|
|
></H3
|
|
><P
|
|
>In X there are 2 ways applications can get into trouble.</P
|
|
><P
|
|
>The most common way is if they don't trust the mouse driver
|
|
to keep track of where the mouse is on the screen, and insist
|
|
on doing it themselves. win31 & geoworks are too applications
|
|
in this category. They read mouse movement from the mouse
|
|
driver in turns of mickeys i.e. they read the raw movement data.</P
|
|
><P
|
|
>To support this mouse driver then tracks where you were and where you
|
|
move to, in terms of x,y screen coordinates. Then works the standard
|
|
formulas backwards that calculate screen coordinates from mickeys to
|
|
generate mickeys from screen coordinates. And it feeds these mickeys
|
|
to the application. As long as the application and dosemu agree on
|
|
the same formulas for converting mickeys to screen coordinates all is
|
|
good.</P
|
|
><P
|
|
>The only real problem with this is sometimes X mouse and the
|
|
application mouse get out of sync. Especially if you take your
|
|
mouse cursor out of the dosemu window, and bring it back in again.</P
|
|
><P
|
|
>To compensate for getting out of sync what we do is whenever we
|
|
reenter the Xdos window is send a massive stream of mickeys heading
|
|
for the upper left corner of the screen. This should be enough to
|
|
kick us any an good mouse drivers screen limits. Then once we know
|
|
where we are we simulate movement for 0,0. </P
|
|
><P
|
|
>In practice this isn't quite perfect but it does work reasonably well.</P
|
|
><P
|
|
>The tricky part then is to get the application and dosemu to agree on
|
|
the algorithm. The algorithm we aim at is one mickey one pixel.
|
|
Dosemu does this by default under X but you can force it with.
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> emumouse x 8 y 8 a</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
To do this in various various applications generally falls under
|
|
the category of disable all mouse accelration.</P
|
|
><P
|
|
>for win31 you need
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> MouseThreshold1=0
|
|
MouseThreshold2=0
|
|
MouseSpeed=0</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
in the '[windows]' section of win.ini</P
|
|
><P
|
|
>The fool proof solution is to take total control of the mouse in X.
|
|
This is controlled by the $_X_mgrab_key in /etc/dosemu.conf
|
|
$_X_mgrab_key contains an X keysym of a key that when pressed
|
|
with both Ctrl & Alt held down will turn on the mouse grab, which
|
|
restricts the X mouse to the dosemu window, and gives dosemu complete
|
|
control over it. Ctrl-Alt-$_X_mgrab_key will then release the
|
|
mouse grab returning things to normal.</P
|
|
><P
|
|
>I like: $_X_mgrab_key="Scroll_Lock" (Ctrl-Alt-Scroll_Lock)
|
|
but $_X_mgrab_key="a" is a good conservative choice. (Ctrl-Alt-A)
|
|
You can use xev to see what keysyms a key generates.</P
|
|
><P
|
|
>Currently the way the X mouse code and the mouse grab are
|
|
structured the internal mouse driver cannot display the mouse
|
|
when the mouse grab is active. In particular without the grab
|
|
active to display the mouse cursor we just let X draw the mouse for
|
|
us, (as normal). When the mouse grab is active we restrict the mouse
|
|
to our current window, and continually reset it to the center of the
|
|
current screeen (allowing us to get relative amounts of movement).
|
|
A side effect of this is that the the position of the X cursor and the
|
|
dos cursor _not_ the same. So we need a different strategy to display
|
|
the dos cursor.</P
|
|
><P
|
|
>The other way an application can get into trouble in X, and also
|
|
on the console for that matter is if it is partially broken. In
|
|
particular the mouse driver is allowed to return coordinates that
|
|
have little to no connection with the actual screen resolution. So an
|
|
application mouse ask the mouse driver it's maximums and then scale
|
|
the coordinates it gets into screen positions. The broken
|
|
applications don't ask what the maximum & minimum resolutions are
|
|
and just assume that they know what is going on.</P
|
|
><P
|
|
>To keep this problem from being too severe in mouse.c we have
|
|
attempted to match the default resolutions used by other mouse
|
|
drivers. However since this is up to the choice of an individual
|
|
mouse driver there is doubtless code out there developed with
|
|
different resolutions in mind.</P
|
|
><P
|
|
>If you get stuck with such a broken application we have developed a
|
|
work around, that is partially effective. The idea being that if the
|
|
application draws it's own mouse pointer it really doesn't matter
|
|
where the dos mouse driver thinks the mouse is things should work.
|
|
So with emumouse it is possible to set a minimum resolution to return
|
|
to an application. By setting this minimum resolution to as big or
|
|
bigger than the application expect to see it should work. The side
|
|
effect of setting a minimum resolution bigger than the application
|
|
expects to see in X is that there will be some edges to the of
|
|
the screen where the application draws the cursor at the edge of the
|
|
window, and yet you need to continue scrolling a ways before the cursor
|
|
comes out there. In general this will affect the right and bottom
|
|
edges of the screen.</P
|
|
><P
|
|
>To read the current minimum use:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> emumouse i</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
The default is 640x200</P
|
|
><P
|
|
>To set the minimum resolution use:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> emumouse Mx 640 My 200</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
If you application doesn't draw it's own mouse cursor a skew of this
|
|
kind can be nasty. And there is no real good fix. You can set the
|
|
mininum down as well as up and so it may be possible to match what
|
|
the app expects as an internal resolution. However there is only
|
|
so much we can do to get a borken application to run and that
|
|
appears to be the limit.</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN701"
|
|
>11. Running a DOS application directly from Unix shell</A
|
|
></H2
|
|
><P
|
|
>This part of the document was written by Hans
|
|
<A
|
|
HREF="mailto:lermen@fgan.de"
|
|
TARGET="_top"
|
|
><lermen@fgan.de></A
|
|
>.</P
|
|
><P
|
|
>This chapter deals with starting DOS commands directly from Linux.
|
|
You can use this information to set up icons or menu items in X.
|
|
Using the keystroke, input and output redirection facilities you can
|
|
use DOS commands in shell scripts, cron jobs, web services, and so on.</P
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN706"
|
|
>11.1. Using <B
|
|
CLASS="COMMAND"
|
|
>unix -e</B
|
|
> in autoexec.bat</A
|
|
></H3
|
|
><P
|
|
>The default autoexec.bat file has a statement <B
|
|
CLASS="COMMAND"
|
|
>unix -e</B
|
|
> at the end. This
|
|
command executes the DOS program or command that was specified on the
|
|
<B
|
|
CLASS="COMMAND"
|
|
>dosemu</B
|
|
> command line.</P
|
|
><P
|
|
>For example:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> dosemu "/home/clarence/games/commander keen/keen1.exe"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
will automatically:
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
>Lredir "/" if the specified program is not available from an
|
|
already-redirected drive,</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>"cd" to the correct directory,</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>execute the program automagically,</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>and quit DOSEMU when finished, all without any typing in DOS.</P
|
|
></LI
|
|
></UL
|
|
>
|
|
Using "-E" at the command line causes DOSEMU to continue after the
|
|
DOS program finishes.</P
|
|
><P
|
|
>You can also specify a DOS command, such as "dir". A combination with
|
|
the -dumb command-line option is useful if you want to retrieve the
|
|
output of the DOS command, such as
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> dosemu -dumb dir > listing</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
In this case (using -dumb, but not -E) all the startup messages that
|
|
DOSEMU and DOS generate are suppressed and you only get the output of "dir".
|
|
The output file contains DOS end-of-line markers (CRLF).</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN725"
|
|
>11.2. Using the keystroke facility.</A
|
|
></H3
|
|
><P
|
|
>Make use of the -input command-line option, such as
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> dosemu -input 'dir > C:\\garbage\rexitemu\r'</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
The '...' will be 'typed in' by DOSEMU exactly as if you had them
|
|
typed at the keyboard. The advantage of this technique is, that all
|
|
DOS applications will accept them, even interactive ones. A '\' is
|
|
interpreted as in C and leads in ESC-codes. Here is a list of the
|
|
current implemented ones:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> \r Carriage return == <ENTER>
|
|
\n LF
|
|
\t tab
|
|
\b backspace
|
|
\f formfeed
|
|
\a bell
|
|
\v vertical tab
|
|
|
|
|
|
\^x <Ctrl>x, where X is one of the usual C,M,L,[ ...
|
|
(e.g.: \^[ == <Ctrl>[ == ESC )
|
|
|
|
\Ax <Alt>x, hence \Ad means <Alt>d
|
|
|
|
\Fn; Function key Fn. Note that the trailing ';' is needed.
|
|
(e.g.: \F10; == F10 )
|
|
|
|
\Pn; Set the virtual typematic rate, thats the speed for
|
|
autotyping in. It is given in unix timer ticks to wait
|
|
between two strokes. A value of 7 for example leads to
|
|
a rate of 100/7=14 cps.
|
|
|
|
\pn; Before typing the next stroke wait n unix ticks.
|
|
This is useful, when the DOS-application flushes the
|
|
keyboard buffer on startup. Your strokes would be discarded,
|
|
if you don't wait.
|
|
</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN731"
|
|
>11.3. Using an input file</A
|
|
></H3
|
|
><P
|
|
> <P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> Make a file "FILE" containing all keystrokes you need to boot DOSEMU
|
|
and to start your dos-application, ... and don't forget to have CR
|
|
(literal ^M) for 'ENTER'. FILE may look like this (as on my machine):</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> 2^Mdir > C:\garbage^Mexitemu^M </PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
which could choose point 2 of the boot menu, execute 'dir' with output
|
|
to 'garbage', and terminate DOSEMU, where the ^M stands for CR.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>and execute DOSEMU like this:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> dosemu -dumb < FILE</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
><P
|
|
>In bash you can also use
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> echo -e 'dir \gt; c:\\garbage\rexitemu\r' | dosemu -dumb</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
or, when your dos-app does only normal printout (text), then you may
|
|
even do this
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> echo -e 'dir\rexitemu\r' | dosemu -dumb > FILE.out</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>FILE.out then contains the output from the DOS application, but (unlike the
|
|
<B
|
|
CLASS="COMMAND"
|
|
>unix -e</B
|
|
> technique, merged with all startup messages.</P
|
|
><P
|
|
>You may elaborate this technique by writing a script, which gets the
|
|
dos-command to execute from the commandline and generate 'FILE' for you.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN748"
|
|
>11.4. Running DOSEMU within a cron job</A
|
|
></H3
|
|
><P
|
|
>When you try to use one of the above to start DOSEMU out of a crontab,
|
|
then you have to asure, that the process has a proper environment set up
|
|
( especially the TERM and/or TERMCAP variable ).</P
|
|
><P
|
|
>Normally cron would setup TERM=dumb, this is fine because DOSEMU recognizes
|
|
it and internally sets it's own TERMCAP entry and TERM to `dosemu-none'.
|
|
You may also configure your video to
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> dosemu ... -dumb</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
or have a TERM=none to force the same setting.
|
|
In all other crontab run cases you may get nasty error messages either
|
|
from DOSEMU or from Slang.</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN753"
|
|
>12. Commands & Utilities</A
|
|
></H2
|
|
><P
|
|
>These are some utitlies to assist you in using Dosemu.</P
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN756"
|
|
>12.1. Programs</A
|
|
></H3
|
|
><P
|
|
><P
|
|
></P
|
|
><DIV
|
|
CLASS="VARIABLELIST"
|
|
><DL
|
|
><DT
|
|
>uchdir.com</DT
|
|
><DD
|
|
><P
|
|
> change the Unix directory for Dosemu (use chdir(2))</P
|
|
></DD
|
|
><DT
|
|
>dosdbg.com</DT
|
|
><DD
|
|
><P
|
|
> change the debug setting from within Dosemu
|
|
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> dosdbg -- show current state</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> dosdbg <string></P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> dosdbg help -- show usage information</P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
></DD
|
|
><DT
|
|
>eject.com</DT
|
|
><DD
|
|
><P
|
|
> eject CD-ROM from drive</P
|
|
></DD
|
|
><DT
|
|
>emumouse.com</DT
|
|
><DD
|
|
><P
|
|
> fine tune internal mousedriver of Dosemu
|
|
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> emumouse h -- display help screen</P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
></DD
|
|
><DT
|
|
>exitemu.com</DT
|
|
><DD
|
|
><P
|
|
> terminate Dosemu</P
|
|
></DD
|
|
><DT
|
|
>ugetcwd.com</DT
|
|
><DD
|
|
><P
|
|
> get the Unix directory for Dosemu (use getcwd(2))</P
|
|
></DD
|
|
><DT
|
|
>isemu.com</DT
|
|
><DD
|
|
><P
|
|
> detects Dosemu version and returns greater 0 if running under
|
|
Dosemu</P
|
|
></DD
|
|
><DT
|
|
>lancheck.exe</DT
|
|
><DD
|
|
><P
|
|
> ???</P
|
|
></DD
|
|
><DT
|
|
>lredir.com</DT
|
|
><DD
|
|
><P
|
|
> redirect Linux directory to Dosemu
|
|
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> lredir -- show current redirections</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> lredir D: LINUX\FS\tmp -- redirects /tmp to drive D:</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> lredir help -- display help screen</P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
></DD
|
|
><DT
|
|
>speed.com</DT
|
|
><DD
|
|
><P
|
|
> set cpu usage (HogThreshold) from inside Dosemu</P
|
|
></DD
|
|
><DT
|
|
>system.com</DT
|
|
><DD
|
|
><P
|
|
> interface to system(2)...</P
|
|
></DD
|
|
><DT
|
|
>unix.com</DT
|
|
><DD
|
|
><P
|
|
> execute Unix commands from Dosemu
|
|
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> unix -- display help screen</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> unix ls -al -- list current Linux directory</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> caution! try "unix" and read the help screen</P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
></DD
|
|
><DT
|
|
>cmdline.exe</DT
|
|
><DD
|
|
><P
|
|
> Read /proc/self/cmdline and put strings such as "var=xxx"
|
|
found on the commandline into the DOS enviroment.
|
|
Example having this as the dosemu commandine:
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> dosemu.bin "autoexec=echo This is a test..."</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
then doing
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
>
|
|
C:\cmdline < D:\proc\self\cmdline
|
|
%autoexec%</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
would display "This is a test..." on the DOS-Terminal</P
|
|
></DD
|
|
><DT
|
|
>vgaoff.com</DT
|
|
><DD
|
|
><P
|
|
> disable vga option</P
|
|
></DD
|
|
><DT
|
|
>vgaon.com</DT
|
|
><DD
|
|
><P
|
|
> enable vga option</P
|
|
></DD
|
|
><DT
|
|
>xmode.exe</DT
|
|
><DD
|
|
><P
|
|
> set special X parameter when running as xdos</P
|
|
></DD
|
|
></DL
|
|
></DIV
|
|
></P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN850"
|
|
>12.2. Drivers</A
|
|
></H3
|
|
><P
|
|
>These are useful drivers for Dosemu</P
|
|
><P
|
|
><P
|
|
></P
|
|
><DIV
|
|
CLASS="VARIABLELIST"
|
|
><DL
|
|
><DT
|
|
>cdrom.sys</DT
|
|
><DD
|
|
><P
|
|
> allow direct access to CD-ROM drives from Dosemu</P
|
|
></DD
|
|
><DT
|
|
>ems.sys</DT
|
|
><DD
|
|
><P
|
|
> enable EMM in Dosemu</P
|
|
></DD
|
|
><DT
|
|
>emufs.sys</DT
|
|
><DD
|
|
><P
|
|
> redirect Unix directory to Dosemu</P
|
|
></DD
|
|
><DT
|
|
>aspi.sys</DT
|
|
><DD
|
|
><P
|
|
> ASPI conform SCSI driver</P
|
|
></DD
|
|
><DT
|
|
>fossil.com</DT
|
|
><DD
|
|
><P
|
|
> FOSSIL serial driver (TSR)</P
|
|
></DD
|
|
></DL
|
|
></DIV
|
|
></P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN875"
|
|
>13. Keymaps</A
|
|
></H2
|
|
><P
|
|
>This keymap is for using dosemu over telnet, and
|
|
having *all* your keys work. This keymap is not complete. But
|
|
hopefully with everyones help it will be someday :)</P
|
|
><P
|
|
>There are a couple of things that are intentionally
|
|
broken with this keymap, most noteably F11 and F12. This is because
|
|
they are not working though slang correctly at the current instant.
|
|
I have them mapped to "greyplus" and "greyminus". Also the scroll
|
|
lock is mapped to shift-f3. This is because the scroll lock dosn't
|
|
work right at all. Please feel free to send keymap patches in that
|
|
fix anything but these.</P
|
|
><P
|
|
>If you want to patch <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>dosemu</I
|
|
></SPAN
|
|
> to fix either of those problems, i'd be
|
|
<SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>glad</I
|
|
></SPAN
|
|
> to accept those :)</P
|
|
><P
|
|
>to figure out how to edit this, read the keystroke-howto.</P
|
|
><P
|
|
>as of 3/30/95, control/shift/alternate
|
|
home/insert/delete/end/pageup/pagedown should work. </P
|
|
><P
|
|
>Major issues will be:</P
|
|
><P
|
|
>Do we move "alt-<fkey>" to "control-<fkey>" to switch virtual
|
|
consoles?</P
|
|
><P
|
|
>who is going to fix the linux keyboard device to be able to handle
|
|
multiple keymaps at the same time?</P
|
|
><P
|
|
>--------------------------------------------------------</P
|
|
><P
|
|
>to use it:</P
|
|
><P
|
|
>as root type
|
|
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> loadkeys dosemu.new.keymap</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
><P
|
|
>(then run dosemu via telnet, or something in slang mode)</P
|
|
><P
|
|
>when your done, find your old keymap, and load it back, cause
|
|
control-home won't work in emacs anymore (or any other special key in
|
|
any applicaion that uses xlate)</P
|
|
><P
|
|
>if you find a key missing, please add it and send me the patch. (test
|
|
it first! :)</P
|
|
><P
|
|
>if you find a key missing, and don't feel like coding it, <SPAN
|
|
CLASS="emphasis"
|
|
><I
|
|
CLASS="EMPHASIS"
|
|
>don't tell
|
|
me</I
|
|
></SPAN
|
|
>! I already know that there are a lot of keys missing.</P
|
|
><P
|
|
>corey sweeney
|
|
<A
|
|
HREF="mailto:corey@interaccess.com"
|
|
TARGET="_top"
|
|
><corey@interaccess.com ></A
|
|
></P
|
|
><P
|
|
>Sytron Computers</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN899"
|
|
>14. Networking using DOSEMU</A
|
|
></H2
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN901"
|
|
>14.1. Direct NIC access</A
|
|
></H3
|
|
><P
|
|
>The easiest (and not recommended) way to set up the networking
|
|
in DOSEMU is to use the direct NIC access. It means that DOSEMU
|
|
will exclusively use one of your network interfaces, say eth1.
|
|
No other processes will be able to use that interface. If they
|
|
try to, the data exchange will became unreliable. So you have
|
|
to make sure that this network interface is not used by anything
|
|
including the kernel itself, before starting DOSEMU.
|
|
The settings for this method are as follows:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_pktdriver = (on)
|
|
$_ethdev = "eth1"
|
|
$_vnet = "eth"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
Note that this method requires root privileges.</P
|
|
><P
|
|
>As you can see, this simple method has many shortcomings. If
|
|
you don't have the network card dedicated specially for dosemu,
|
|
consider using more advanced method called "Virtual Networking".</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN906"
|
|
>14.2. Virtual networking</A
|
|
></H3
|
|
><P
|
|
>Virtual networking is a mechanism that allows to overcome all the
|
|
limitations of the direct NIC access method, but it requires more
|
|
work to set up everything properly.
|
|
A special virtual network devices can be created using TUN/TAP interface.
|
|
This will enable multiple dosemu sessions and the linux kernel to be on
|
|
a separate virtual network. Each dosemu will have its own network device
|
|
and ethernet address.</P
|
|
><P
|
|
>First make sure that your Linux kernel comes with support for TUN/TAP;
|
|
for details check Documentation/networking/tuntap.txt
|
|
in the Linux kernel source. The user who runs DOSEMU should have
|
|
read/write access to /dev/net/tun. Then either:
|
|
|
|
<P
|
|
></P
|
|
><OL
|
|
TYPE="1"
|
|
><LI
|
|
><P
|
|
>Set
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_pktdriver=(on)
|
|
$_vnet = "tap"
|
|
$_tapdev = ""</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
></P
|
|
><P
|
|
>Start DOSEMU as usual and configure the network device while DOSEMU is
|
|
running (using ifconfig manually as root, a script, or usernetctl if
|
|
your distribution supplies that), e.g.
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> ifconfig dosemu_tap0 up 192.168.74.1</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
></P
|
|
><P
|
|
>Configure the DOS TCP/IP network clients to have another IP address in the
|
|
subnet you just configured. This address should be unique, i.e. no other
|
|
dosemu, or the kernel, should have this address. For the example addresses
|
|
given above, 192.168.74.2-192.168.74.254 would be good.
|
|
Your network should now be up and running and you can, for example,
|
|
use a DOS SSH client to ssh to your own machine, but it will
|
|
be down as soon as you exit DOSEMU.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>Or set
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_pktdriver=(on)
|
|
$_vnet = "tap"
|
|
$_tapdev = "tap0"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
></P
|
|
><P
|
|
>Obtain tunctl from the user mode linux project. Then set up a persistent
|
|
TAP device using tunctl (use the -u owner option if you do that as root).
|
|
Configure the network using ifconfig as above, but now before starting
|
|
DOSEMU. Now start DOSEMU as often as you like and you can use the network
|
|
in the same way as you did above.</P
|
|
><P
|
|
>Note, however, that multiple DOSEMU sessions that run at the same time
|
|
need to use multiple tapxx devices. $_tapdev can be changed without
|
|
editing dosemu.conf or ~/.dosemu/.dosemurc (if you leave it commented out there)
|
|
by using dosemu -I "netdev tap1".</P
|
|
></LI
|
|
></OL
|
|
></P
|
|
><P
|
|
>With the above you did set up a purely virtual internal network between
|
|
the DOSEMU and the real Linux box. This is why in the
|
|
above example 192.168.74.1 should *not* be a real IP address of the
|
|
Linux box, and the 192.168.74 network should not exist as a real
|
|
network. To enable DOS programs to talk to the outside world you have
|
|
to set up Ethernet bridging or IP routing.</P
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN923"
|
|
>14.2.1. Bridging</A
|
|
></H4
|
|
><P
|
|
>Bridging, using brctl (look for the bridge-utils package if you don't
|
|
have it), is somewhat easier to accomplish than the IP routing.
|
|
You set up a bridge, for example named "br0" and connect eth0 and
|
|
tap0 to it. Suppose the Linux box has IP 192.168.1.10 on eth0, where
|
|
192.168.1.x can be a real LAN, and the uid of the user who is
|
|
going to use DOSEMU is 500, then you can do (as root):
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> brctl addbr br0
|
|
ifconfig eth0 0.0.0.0 promisc up
|
|
brctl addif br0 eth0
|
|
ifconfig br0 192.168.1.10 netmask 255.255.255.0 up
|
|
tunctl -u 500
|
|
ifconfig tap0 0.0.0.0 promisc up
|
|
brctl addif br0 tap0</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
Now the DOSEMU's IP can be set to (for example) 192.168.1.11.
|
|
It will appear in the same network your linux machine is.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT3"
|
|
><HR><H4
|
|
CLASS="SECT3"
|
|
><A
|
|
NAME="AEN927"
|
|
>14.2.2. IP Routing</A
|
|
></H4
|
|
><P
|
|
>If you like to use IP routing, note that unlike with bridging,
|
|
each DOSEMU box will reside in a separate IP subnet, which consists
|
|
only of 2 nodes: DOSEMU itself and the corresponding TAP device on
|
|
Linux side.
|
|
You have to choose an IP address for that subnet. If your LAN has the
|
|
address 192.168.1.0 and the netmask is 255.255.255.0, the dosemu subnet can
|
|
have the address 192.168.74.0 and tap0 can have the address 192.168.74.1:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> ifconfig tap0 192.168.74.1 netmask 255.255.255.0 up</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
Choose a valid IP address from that subnet for DOSEMU box. It can be
|
|
192.168.74.2. Configure your DOS client to use that IP. Configure your
|
|
DOS client to use a gateway, which is the TAP device with IP 192.168.74.1.
|
|
Then you have to add the proper entry to the routing table on your Linux
|
|
box:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> route add -net 192.168.74.0 netmask 255.255.255.0 dev tap0</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
The resulting entry in the routing table will look like this:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> Destination Gateway Genmask Flags Metric Ref Use Iface
|
|
192.168.74.0 * 255.255.255.0 U 0 0 0 tap0</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
|
|
Then, unless the Linux box on which DOSEMU is running is a default
|
|
gateway for the rest of you LAN, you will have to also add an entry
|
|
to the routing table on each node of your LAN:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> route add -net 192.168.74.0 netmask 255.255.255.0 gw 192.168.1.10</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
(192.168.1.10 is the IP of the box DOSEMU is running on).
|
|
Also you have to check whether IP forwarding is enabled, and if not -
|
|
enable it:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> echo 1 > /proc/sys/net/ipv4/ip_forward</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
Now DOSEMU will be able to access any node of your LAN and vice versa.
|
|
Sometimes the forwarding is blocked by the firewall rules. In that
|
|
case try the following command (as root):
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> iptables -t filter -I FORWARD 1 -i tap0 -j ACCEPT</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
></P
|
|
><P
|
|
>Yet one more thing have to be done if you want dosemu to be able to
|
|
access Internet. Unlike in your LAN, you are not supposed to change
|
|
the routing tables on an every Internet host, so how to make them
|
|
to direct the IP packets back to dosemu's virtual network? To
|
|
accomplish this, you only have to enable the IP Masquerading on
|
|
the network interface that looks into Internet. If your machine
|
|
serves as a gateway in a LAN, then the masquerading is most likely
|
|
already enabled, and no further work is required. Otherwise you
|
|
must run the following command
|
|
(assuming the eth0 interface serves the Internet connection):
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
Now you'll find your dosemu session being able to access Internet.
|
|
If you want these changes to be permanent, you can use iptables-save
|
|
script to save the changes to your iptables configuration file.</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN938"
|
|
>14.3. VDE networking backend</A
|
|
></H3
|
|
><P
|
|
>If you just need to have a working internet access from within your
|
|
DOSEMU environment, then you might want to consider using VDE networking.
|
|
slirpvde is a user mode networking utility providing a NAT-like
|
|
service, DHCP server, as well as a virtualized network in the 10.0.2.0/24
|
|
range, with a default gateway and a DNS server.
|
|
Note that dosemu uses VDE backend as a fallback when other methods are
|
|
unavailable. It also tries to start all the vde utilities, so no
|
|
configuration efforts are usually needed.</P
|
|
><P
|
|
>Use the following command to get VDE sources:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> svn checkout svn://svn.code.sf.net/p/vde/svn/trunk vde-svn</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
You may also need to apply the following patches:
|
|
<A
|
|
HREF="http:"
|
|
TARGET="_top"
|
|
>http:</A
|
|
>sourceforge.net/p/vde/bugs/70/attachment/flags.diff>
|
|
patch1
|
|
|
|
<A
|
|
HREF="http:"
|
|
TARGET="_top"
|
|
>http:</A
|
|
>sourceforge.net/p/vde/bugs/71/attachment/atty.diff>
|
|
patch2
|
|
|
|
<A
|
|
HREF="http:"
|
|
TARGET="_top"
|
|
>http:</A
|
|
>sourceforge.net/p/vde/bugs/_discuss/thread/dc88b292/4b26/attachment/msg.diff>
|
|
patch3
|
|
|
|
<A
|
|
HREF="http:"
|
|
TARGET="_top"
|
|
>http:</A
|
|
>sourceforge.net/p/vde/bugs/73/attachment/0001-slirp-Forward-ICMP-echo-requests-via-unprivileged-so.patch>
|
|
patch4 </P
|
|
><P
|
|
>VDE-specific config options:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> $_pktdriver=(on)
|
|
$_vnet = "vde"
|
|
$_vdeswitch = "/tmp/switch1
|
|
$_slirpargs = "--dhcp"</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
></P
|
|
><P
|
|
>Your wattcp.cfg file will look as simple as this:
|
|
<TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> my_ip=dhcp</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
></P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><HR><H2
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN951"
|
|
>15. Using Windows and Winsock</A
|
|
></H2
|
|
><P
|
|
>This is the Windows Net Howto by Frisoni Gloriano
|
|
<A
|
|
HREF="mailto:gfrisoni@hi-net.it"
|
|
TARGET="_top"
|
|
><gfrisoni@hi-net.it></A
|
|
>
|
|
on 15 may 1997</P
|
|
><P
|
|
>This document tries to describe how to run the Windows trumpet winsock over
|
|
the dosemu built-in packet driver, and then run all TCP/IP winsock-based
|
|
application (netscape, eudora, mirc, free agent .....) in windows environment.</P
|
|
><P
|
|
>This is a very long step-by-step list of operation, but you can make
|
|
little scripts to do all very quickly ;-)</P
|
|
><P
|
|
>In this example, I use the dosnet based packet driver. It is very powerful
|
|
because you can run a "Virtual net" between your dos-windows session and the
|
|
linux, and run tcp/application application without a real (hardware) net.</P
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN958"
|
|
>15.1. LIST OF REQUIRED SOFTWARE</A
|
|
></H3
|
|
><P
|
|
> <P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> The WINPKT.COM virtual packet driver, version 11.2
|
|
I have found this little tsr in the Crynwr packet driver distribution
|
|
file PKTD11.ZIP </P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> The Trumpet Winsock 2.0 revision B winsock driver for windows.</P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN966"
|
|
>15.2. STEP BY STEP OPERATION (LINUX SIDE)</A
|
|
></H3
|
|
><P
|
|
> <P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> Enable "dosnet" based dosemu packet driver: </P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> cd ./src/dosext/net/net
|
|
select_packet (Ask single or multi -> m)</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
>
|
|
</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Make the dosnet linux module:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> cd ./src/dosext/net/v-net
|
|
make</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Make the new dosemu, with right packet driver support built-in:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> make
|
|
make install </PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Now you must load the dosnet module:</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> insmod ./src/dosext/net/v-net/dosnet.o</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Some linux-side network setup (activate device, routing). This stuff depends
|
|
from your environment, so I write an example setup.</P
|
|
><P
|
|
>Here you configure a network interface dsn0 (the dosnet interface) with
|
|
the ip address 144.16.112.1 and add a route to this interface.</P
|
|
><P
|
|
>This is a good example to make a "virtul network" from your dos/windows
|
|
environment and the linux environment.</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> ifconfig dsn0 144.16.112.1 broadcast 144.16.112.255 netmask 255.255.255.0
|
|
route add -net 144.16.112.0 dsn0</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><HR><H3
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="AEN992"
|
|
>15.3. STEP BY STEP OPERATION (DOS SIDE)</A
|
|
></H3
|
|
><P
|
|
>I suppose you know how to run windows in dosemu. You can read the <A
|
|
HREF="#WINDOWS"
|
|
>Section 9</A
|
|
>
|
|
document if you need more information. Windows is not very stable, but works.</P
|
|
><P
|
|
> <P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> start dosemu.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> copy the winpkt.com driver and the trumpet winsock driver in some
|
|
dos directory.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> start the winpkt TSR. (dosemu assign the 0x60 interrupt vector to the
|
|
built-in packet driver)</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> winpkt 0x60</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> edit the trumpet winsock setup file trumpwsk.ini. Here is an example of
|
|
how to setup this file:
|
|
(I think you can use less parameters, if you have the time to play with
|
|
this file. You can also setup this stuff from the winsock setup dialog-box).</P
|
|
><P
|
|
> <TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="90%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> [Trumpet Winsock]
|
|
netmask=255.255.255.0 <-- class C netmask.
|
|
gateway=144.16.112.1 <-- address in the default gateway.
|
|
dns=www.xxx.yyy.zzz <-- You must use right value for the dns.
|
|
domain=hi-net.it
|
|
ip=144.16.112.10 <-- Windows address in the dosnet.
|
|
vector=60 <-- packet driver interrupt vector.
|
|
mtu=1500
|
|
rwin=4096
|
|
mss=1460
|
|
rtomax=60
|
|
ip-buffers=32
|
|
slip-enabled=0 <--- disable slip
|
|
slip-port=2
|
|
slip-baudrate=57600
|
|
slip-handshake=1
|
|
slip-compressed=0
|
|
dial-option=1
|
|
online-check=0
|
|
inactivity-timeout=5
|
|
slip-timeout=0
|
|
slip-redial=0
|
|
dial-parity=0
|
|
font=Courier,9
|
|
registration-name=""
|
|
registration-password=""
|
|
use-socks=0
|
|
socks-host=0.0.0.0
|
|
socks-port=1080
|
|
socks-id=
|
|
socks-local1=0.0.0.0 0.0.0.0
|
|
socks-local2=0.0.0.0 0.0.0.0
|
|
socks-local3=0.0.0.0 0.0.0.0
|
|
socks-local4=0.0.0.0 0.0.0.0
|
|
ppp-enabled=0 <-------- disable ppp
|
|
ppp-usepap=0
|
|
ppp-username=""
|
|
ppp-password=""
|
|
win-posn=42 220 867 686 -1 -1 -4 -4 1
|
|
trace-options=16392
|
|
|
|
[default vars]</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
> </P
|
|
></LI
|
|
><LI
|
|
><P
|
|
> Now you can run windows, startup trumpet winsock and .....
|
|
enjoy with your windoze tcp/ip :-) </P
|
|
></LI
|
|
></UL
|
|
> </P
|
|
><P
|
|
>Gloriano Frisoni.
|
|
<A
|
|
HREF="mailto:gfrisoni@hi-net.it"
|
|
TARGET="_top"
|
|
><gfrisoni@hi-net.it></A
|
|
> </P
|
|
></DIV
|
|
></DIV
|
|
></DIV
|
|
></BODY
|
|
></HTML
|
|
> |