Did our site help?
Make a donation
with PayPal today!

What is this?

This is functionality that integrates support for the Linux DOS emulator into the Synchronet BBS software written by Rob Swindell.

The purpose of such integration is to enable the sysop to install new DOS doors in a simple and straightforward manner, and to be able to easily work around the inevitable emulation-related problems that will occur.

Getting Started

SBBSINST (Linux-install from sbbsunix.tgz) flavor

If you are using the SBBSINST program to bootstrap your Synchronet installation, just add to "Compiler Flags": USE_DOSEMU=1. This is the easiest way to get started.

CVS Source flavor

Follow the instructions in sbbsunix.txt that can be found at the Synchronet homepage to get a fresh copy of the source code for the BBS using CVS. The support has been integrated but must be enabled at compile time; if you want to enable it, when you go to "make" the BBS, do the following:

$ gmake USE_DOSEMU=1

Next, complete the initial configuration according to the instructions in sbbsunix.txt.

Setting up a DOS BBS door


There must be an emusetup.bat in your /path/to/sbbs/ctrl directory. This batch file configures the DOS environment, and can be used to load additional TSRs, change drive letters around, or make any other last minute changes to the environment before the door is loaded. It is required to at least load a FOSSIL driver in this batch file.

The rest of these instructions assume that you are using the default remapped drive letters and haven't changed them around in emusetup.bat. The default drive letters are:

Any necessary utils that should be loaded before the door starts (like fossil driver, ansi driver, etc) should be placed in the emusetup.bat with a PATH that points to them. The default location is in a \dosutils directory immediately preceding the door's directory. (For example, if your door is in /home/bbs/doors/lord, put the dosutils directory as /home/bbs/doors/dosutils.)

The default dosemu binary is /usr/bin/dosemu.bin. If you have a different one that you would like all DOS programs that Synchronet launches to use, configure DOSemuPath in sbbs.ini.
NOTE: Be sure to point to `dosemu.bin` and not the `dosemu` wrapper script.

Ensure that you have a working dosemu setup before trying to set it up with Synchronet! For Debian, simply `apt-get install dosemu dosemu-freedos`. For other distributions, you will need to first install and configure dosemu, and then install FreeDOS (or your DOS of choice) and set it up to work with dosemu. Ensure that you can at least get to a DOS prompt through standalone DOSEMU before even trying to use it with Synchronet.

To configure a DOS BBS door in scfg:

You probably want to also add the door's setup program as a standard I/O program (see below for details on standard I/O programs). If you don't want to do this, you will need to enter DOSEMU, redirect the door's parent directory to E: like this assuming the door is in /sbbs/xtrn/doordir:

C:\> lredir E: linux\fs\sbbs\xtrn
then go to E:, change to the door's directory, and run the setup program. If you don't do this redirection and set up through the redirected drive, you will probably set up the door to use wrong paths and it won't work!

When you set up the door, point it to D:\ for the dropfile path. Also, generally it would be a good idea to tell the door to use a fossil driver, unless it doesn't work or produces strange results (like missing lines or dropped characters), in which case you can use the internal comm routines of the door. (DOSEMU's virtual modem support allows both approaches.)

The door's actual directory will be mounted on E:\ with the root of E: being the parent directory of the door. So if your door is in /usr/local/games/tw2002 on the Unix side, it will be in E:\tw2002 on the DOS side. Make sure the door's directory conforms to the DOS 8.3 file format! /usr/local/games/tw2002 would be okay, but /usr/local/games/TradeWars2002 would not. The symptom of a non-conforming directory is a "file not found" when Synchronet tries to change to the DOS door's directory inside DOSEMU.

If the door doesn't start, it's probably a configuration problem of some kind that has left DOSEMU sitting at a DOS prompt. If you have what you think is a hung session, the first thing to try is blindly typing 'exitemu' to see if the session can be exited.

Make SURE that if the door is started with a .bat batch file, that you explicitly name it as such in the "Program Name" field. For instance, LORD's "start.bat" command would be entered as "start.bat %#", not just "start %#". Failure to do this will cause the session to be hung inside DOSEMU when the user exits the door. (You can still exit by blindly typing exitemu when this happens.)

Setting up a non-door DOS program as a door

For the most part, setting up a non-door DOS program is done following the same procedure as a door. The key difference is that you set Redirect STDIO to Yes for a program that is not designed specifically to run as a BBS door.

You can also set up timed events (e.g. door daily maintenance programs) in this same manner. Just make sure Native Program is set to "No" and it will work fine.

It would probably be a good idea to set up command.com as an external, so that you can get access to a DOS shell through the board. From there, you can do things like the initial unzipping and setup of door software with ease.

Be careful with the security of these programs! Since they aren't designed to run as doors, a malicious user who has access could probably wipe out your whole BBS system.

Customization of your Synchronet DOSEMU setup

File Search Precedence:
The following table describes in what order Synchronet will look for various files needed for starting DOSEMU. If a file does not exist in one location or cannot be read, the next location will be tried until there are no more possible locations.


This is useful because you might want to customize the configuration in order to get a particular balky door working. You might want a custom dosemu binary, emusetup.bat, and/or dosemu config for that particular door, while maintaining a different set of configurations that works for mostly everything else.

make sure you are using a dosemu.conf from the DOSEMU distribution of the particular version you are using. (e.g. if using 1.1.4 release, don't use a dosemu.conf from 1.0.2). If you want to customize a config, start from your distro's release dosemu.conf. Unfortunately, if you upgrade to a newer release of DOSEMU, you will probably have to also forward-port your custom config files since the config file format may change.

The most up-to-date freedos distribution can be found here -- this is known to fix problems with Tradewars 2002. You might consider trying DR-DOS if you have problems with FreeDOS. However, be certain that you use the autoexec.bat from the FreeDOS distribution, as the Synchronet integration depends on it (specifically, it depends on the DOSDRIVE_D and unix -e behavior from it). Also remember to copy the DOSEMU support files (usually located in /usr/lib/dosemu/commands) into c:\dosemu in the DR-DOS hdimage.

emusetup.bat customization: This section is mostly TODO so ignore it for now

emusetup.bat -- changing drive letter mappings, and using variables that are passed into it

Known Problems

File locking is dysfunctional with the DOSEMU 1.0.2.x stable releases. File locking problems will manifest themselves as strange error messages related to file opens, long pauses and/or hangs, game data corruption, and other fun stuff. Note that you do not have to be running a multinode BBS to be prone to these issues; most programs detect DOSEMU as a multitasker and thus initiate their lock management regardless of whether or not multiple sessions of the game will be in use. The fix is to upgrade to DOSEMU 1.2 or later, since 1.0.x is obsolete.

There is a file locking hack from Bob Newell which is detailed in this document. Included is a kludge for slow screen draws due to incorrect idling that will occur in some games such as Planets TEOS.

If you are running Debian 'woody', I recommend upgrading to 'sarge' so that you can use DOSEMU 1.2.x that is part of the distribution.

If you are having other problems:

If you want help with this, you must send me *at a minimum* the following files:

Send problem reports to nemesis@icequake.net


The Script Method

There is another way to do this: use a script that launches dosemu. This is the more flexible but non-userfriendly way to use dosemu doors on Synchronet. Example stuff can be found in this tarball.

$Id: linux-dosemu.html,v 1.3 2005/02/21 20:01:57 runderwo Exp $