<sect>Accessing ports with dosemu<label id="port-io">
<p>

Beside ports that certain dosemu-subsystems need, the system administrator
can allow access to specific ports. There are several things to consider:
<itemize>
<item> system integrity
<item> system security
<item> speed
</itemize>

<sect1>System Integrity
<p>

To block two programms from accessing a port without knowing that the other
programm does, this is the strategy dosemu takes.
<itemize>
<item> If the port is not listed in /proc/ioports, no other program should
  access the port. Dosemu will register theses ports. This will also block a
  second dosemu-process from accessing this ports. 
<item> If the port is listed, there's probbabbly a device that could use these
  ports. So we require the system administrator to give the name of the
  corresponding device. Dosemu tries to open this device and hopes this will
  block other from accessing. The parallel ports  (0x378-0x37f) and /dev/lp1
  act in this way.
  To allow access to a port registered in /proc/ioports, it is neccessary
  that the open on the device given by the system administrator
  succeeds. An open on/dev/null will always succeed, but useon your own risk.
</itemize>

<sect1>System Security
<p>

If the strategy administrator did list ports in /etc/dosemu.conf and allow a
user listed in /etc/dosemu.users to use dosemu, (s)he must know what he is
doing.

<sect1>Speed
<p>

For ports below 0x400, each process has a map af ports allowed to access. If
a port is allowed, vm86() dosen't produce an exception. That way, dosemu has
no way to log the values written to that port. To log the value, the port
may not be in that map while inside vm86(). This produces an exception, and
dosemu can decide on a per incident case what to do with that exception. But
that is rather slow.
