Installing Microsoft Windows Millennium Edition in DOSBox-X

Overview

This guide will give a general description of installing Windows Millennium Edition (aka Windows ME) in DOSBox-X, in addition to addressing some common issues.

Windows editions this guide applies to

  • Windows ME - Retail Full

  • Windows ME - OEM Full

Note
Windows ME Upgrade editions have additional requirements and are not covered by this guide.
Warning
In general Windows ME has received less testing with DOSBox-X, and also has more compatibility issues with programs designed for Windows 95 and 98. As such, unless you have a specific requirement for Windows ME, the DOSBox-X team recommends to use Windows 98SE instead.

DOSBox-X config file

You first need to create a DOSBox-X config file.

[sdl]
autolock=true

[dosbox]
title=Windows ME
memsize=128

[video]
vmemsize=8
vesa modelist width limit=0
vesa modelist height limit=0

[dos]
ver=8.0
lfn=false
hard drive data rate limit=0
floppy drive data rate limit=0

[cpu]
cputype=pentium_mmx
core=normal

[sblaster]
sbtype=sb16vibra

[fdc, primary]
int13fakev86io=false

[ide, primary]
int13fakeio=true
int13fakev86io=false

[ide, secondary]
int13fakeio=true
int13fakev86io=false
cd-rom insertion delay=4000

[render]
scaler=none

[autoexec]

Copy the above config and save it as winme.conf

Note
It is recommended by DOSBox-X developers that at this time, you do not enable int13fakev86io in your config file when using Windows ME.
Note
You can increase the allocated RAM up to the Windows ME maximum of 512MB by setting memsize=512. Larger values may be possible with tweaks but are not covered here.

General installation Notes

  • Some parts of the installation can take a considerable amount of time. You may be able to speed this up considerably (depending on the host CPU) by using the DOSBox-X Turbo mode, which can be enabled from the drop-down menu bar by selecting "CPU" followed by "Turbo (Fast Forward)". This turbo mode is not like the old Turbo button on retro PCs, but functions more like a fast-forward, and therefore should not be used when interacting with the guest OS. Starting with DOSBox-X 0.83.21 the turbo mode is automatically disabled the moment a key is pressed, to prevent spurious keypresses to be registered causing undesirable effects.

  • When creating your HDD image with IMGMAKE, instead of specifying a custom size, you can choose a pre-defined template. The pre-defined HDD templates can be seen by running IMGMAKE without arguments.

Dynamic vs Normal core

Starting with DOSBox-X 0.83.10 the dynamic_x86 core, which should perform much better, has been sufficiently enhanced that it can now be used for most use-cases with Windows 98.

However, for now we still recommend that you do the installation of Windows ME using core=normal until issue #2215 is resolved.

But after the installation is finished you should be able to change to core=dynamic_x86.

Should you run into problems such as application crashes or a Windows ME blue-screen that cannot be reproduced with core=normal, please report the problem on the DOSBox-X Git issues page.

Creating a Harddisk image

Note
In addition to the below DOSBox-X command line utility, starting with DOSBox-X 0.83.9 it is possible to create harddisk images from the DOSBox-X menu. Go to the "DOS" menu and select "Create blank disk image…". This option allows for various common harddisk types to be created, for less common types you need to use the command line utility.

Some quick rules about IMGMAKE (for more detail, see: Guide: Managing image files in DOSBox-X):

  • Diskette (floppy) images are always created as FAT12.

  • If your reported DOS version is 7.1 or higher, then harddisk images up to 512MB will use FAT16 by default.

  • Larger size harddisk images will use FAT32 by default (larger than 2GB can only be created as FAT32).

Alternatively, you can use the -fat option to instruct IMGMAKE to create a certain FAT type (assuming that is possible for the harddisk size).

First you need to start DOSBox-X from the command-line, using your newly created winme.conf. This assumes that dosbox-x is in your path and winme.conf is in your current directory.

dosbox-x -conf winme.conf

Then in DOSBox-X you need to create a new harddisk image file with IMGMAKE.

This example uses an 8GB hard disk image with a single FAT32 formatted partition. The maximum FAT32 partition size for Windows ME should be 2TB, but this has not yet been tested in DOSBox-X.

In later Windows versions, starting with Windows 2000, Microsoft won’t let you format a volume bigger than 32GB with FAT32 using its built-in formatting tool, this was presumably to push migrations to NTFS and later exFAT.

IMGMAKE hdd.img -t hd_8gig

Or if you want to create a larger disk, you can create a custom type. This is an example of a 16GB (16*1024=16384 MB) disk, which due to its size, will be formatted as FAT32.

IMGMAKE hdd.img -t hd -size 16384

Installation Method 1: Boot from CD-ROM image

It is possible to boot directly from the Windows ME CD-ROM, as long as you have the "OEM Full" edition, in which case no separate bootdisk is needed.

Requirements

  • DOSBox-X 0.83.12 or later, these instructions will NOT work with other DOSBox forks.

  • Windows ME OEM Full edition CD-ROM image (named "WinME.iso" in the example below).

Getting this image file is outside the scope of this guide.

Starting the installation

This assumes you have already started DOSBox-X with the winme.conf config file and created your harddisk image.

First mount the harddisk image you created earlier:

IMGMOUNT C hdd.img

Now let’s boot from the CD-ROM and start the installation.

IMGMOUNT D WinME.iso
IMGMOUNT A -bootcd D
BOOT A:
Note
If the second IMGMOUNT command gives an error "El Torito CD-ROM boot record not found", your CD-ROM image is not bootable, and you will have to use either a different installation method or a different Windows ME CD-ROM image.

You will first get a Startup menu, where you need to select "Boot from CD-ROM". After which you will get the "Microsoft Windows Millennium Startup Menu" where you need to select "Start computer with CD-ROM support."

After it finished loading the CD-ROM support, you will be at the DOS A:\> prompt. Now type the following commands:

D:
SETUP.EXE /NM

At this point it should format the harddisk and the installation process should start.

When the Windows installer reboots, and your back at the DOSBox-X Z:\> prompt. Close DOSBox-X and edit your winme.conf config file, and add the following lines in the [autoexec] section at the end of the file:

IMGMOUNT C hdd.img
IMGMOUNT D WinME.iso
BOOT C:

Now start DOSBox-X as follows to continue the installation process:

dosbox-x -conf winme.conf

Transfer Windows ME install files to your HDD image

This is an optional step. It is to prevent Windows from asking for the CD-ROM whenever it needs additional files.

Boot Windows ME with the CD-ROM image mounted. In Windows ME, copy the \WIN9X directory and its contents from the CD-ROM to your C: drive. You can copy it to any directory you want, but we assume here that you copied it to C:\WIN9X

Once the files are copied, start REGEDIT and navigate to HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup and change SourcePath= to the location where you copied the files. e.g., SourcePath=C:\WIN9X

In the case of Windows ME, copying the entire directory will require roughly 195MB of diskspace. The \WIN9X\OLS sub-directory can however be skipped which will save roughly 42MB, bringing the total to roughly 153MB.

Installation Method 2

This method will start the installation from DOSBox-X and does not require a bootable CD-ROM image.

Requirements

  • DOSBox-X 0.83.12 or later, these instructions will NOT work with other DOSBox forks.

  • Windows ME CD-ROM image (named "WinME.iso" in the example below).

Getting this image file is outside the scope of this guide.

Starting the installation

This assumes you have already started DOSBox-X with the winme.conf config file and created your harddisk image.

First mount the harddisk image you created earlier:

IMGMOUNT C hdd.img

You will also need to mount the Windows ME CD-ROM. There are a few ways of doing so, but this guide assumes you have a ISO image.

If you have a copy of the Windows ME CD-ROM as an ISO (or a cue/bin pair), you can mount it as follows:

IMGMOUNT D WinME.iso

Copying the contents of the CD-ROM

While not strictly necessary, as it is possible to run SETUP.EXE directly from the CD-ROM (if you have the CD-ROM automatically mounted in your [autoexec] section of the config file). It is recommended to copy the installation files (contents of the WIN9X directory on the CD-ROM) to your HDD image, as it will prevent Windows ME from asking for the CD-ROM when it needs additional files later.

XCOPY D:\WIN9X C:\WIN9X /I /E

The files in the above example are copied to the C:\WIN9X directory. You may want to use C:\WINDOWS\OPTIONS\CABS instead, as that is the directory that OEM installs normally use. But if you do, be aware that the installer will attempt to install into C:\WINDOWS.000 as C:\WINDOWS already exists.

Windows ME SETUP.EXE Select Directory

If you get the above screen during SETUP, select "Other directory" to change it back to C:\WINDOWS

Running SETUP.EXE

You can now run SETUP.EXE.

Note
It is necessary to use the /NM option when running SETUP.EXE, as otherwise Windows ME will not install in DOSBox-X as it will claim that it needs at least a 150MHz CPU. Alternatively, you may overcome this issue by selecting "CPU" ⇒ "Emulate CPU speed" ⇒ "Pentium 166MHz MMX (~97240 cycles)" from the drop-down menu.
C:
CD \WIN9X
SETUP /NM
Windows ME SETUP.EXE Welcome

Now run through the installation process. The actual steps will not be covered in this guide, but are pretty self-explanatory and detailed guides on the Windows ME install process can be found online such as YouTube.

When the installer reboots DOSBox-X, and your back at the DOSBox-X Z:\ prompt, type EXIT.

Now edit your winme.conf config file. At the end of the file, in the [autoexec] section, add the following two lines:

IMGMOUNT C hdd.img
BOOT C:

Save the config file, and at the command-prompt of your host PC you can type the below command to continue with the next phase of the installation process. This is also the command you use, after the installation is finished, to start Windows ME in DOSBox-X.

dosbox-x -conf winme.conf

Booting Windows ME after installation

After the installation is finished, you can start Windows ME from the command-prompt of your host PC, with the following command:

dosbox-x -conf winme.conf

You can optionally create a shortcut on your desktop to start Windows ME directly.

Steps to take after Installation

Once Windows ME is installed, here is some additional software you may want to install or update:

  • Install Microsoft .NET framework version 1.0, 1.1 and 2.0

  • Install Visual C++ 2005 runtime

  • Update to Internet Explorer 6.0 (rarely needed)

  • Update to DirectX 9.0c

  • Install Windows Installer 2.0

  • Install WinG 1.0 (needed by just a few games, and those games typically include it)

  • Install GDI+ redistributable

  • Install Adobe Acrobat Reader 6.0

  • Install/Update to Adobe Flash Player 9.0.47.0

  • Install Apple Quicktime 6.5.2

Mounting CD or Diskette images

DOSBox-X supports mounting CD and diskette (floppy) images, and making those available to an OS booted in DOSBox-X. But only if the image files are specified before starting real DOS or Windows 9x. The option to load image files from the menu bar becomes unavailable the moment you boot DOS or Win9x in DOSBox-X.

This is a known limitation that hopefully will be resolved in the near future.

For now, you can work around it, by specifying multiple image files with the IMGMOUNT command as such:

IMGMOUNT A disk1.img disk2.img disk3.img
IMGMOUNT D cd1.iso cd2.iso cd3.iso

You can then swap between disk images with the swap option from the menu.

Enabling networking

To enable networking, you first need to enable NE2000 adapter emulation in your winme.conf config file and select an appropriate back-end for the NE2000 emulation.

Enabling NE2000 in your DOSBox-X config file

Starting with DOSBox-X 0.83.12 there are two different back-ends to the NE2000 adapter emulation. The default is backend=auto, which implies backend=slirp if SLIRP support is available, otherwise backend=pcap is implied if PCAP support is available.

backend=pcap

The PCAP back-end uses something called "Promiscuous mode". This has the advantage that DOSBox-X can support various legacy network protocols, such as IPX and NetBIOS Frames (aka NetBEUI) in addition to TCP/IP. This mode not only allows communication between DOSBox-X instances on the same network, but also with legacy PCs on the same network.

However, for this to work DOSBox-X needs to have very low-level access to your real network adapter. In some cases, this is not possible, such as:

  • Network Adapter or Driver not supporting Promiscuous mode (most wireless adapters fall into this category).

  • Your Ethernet switch not allowing multiple MAC addresses on a single port or doing any kind of MAC address whitelisting.

  • Sandboxed versions of DOSBox-X (e.g., Flatpak) not allowing the required low-level access.

To enable NE2000 emulation with the pcap back-end, add the following to your winme.conf config file:

[ne2000]
ne2000=true
nicirq=10
backend=pcap

[ethernet, pcap]
realnic=list

The list value for realnic= will need to be replaced by a value representing your actual network adapter. See Guide: Setting up networking in DOSBox-X for more information.

backend=slirp

Unlike the PCAP back-end, the SLIRP back-end does not require Promiscuous mode. As such it will work with wireless adapters, and it will work in most sandboxed environments.

But obviously, it has its own limitations.

  • It is not supported in all platforms, such as Windows Visual Studio builds.

  • It only supports the TCP/IP protocol (other protocols must be TCP/IP encapsulated).

  • It is effectively behind a NAT (Network Address Translation) gateway, meaning that you can communicate outbound, but no systems on the LAN can instantiate a new connection to it. Which means that two DOSBox-X instances on the same LAN using backend=slirp cannot communicate with each other.

To enable NE2000 emulation with the slirp back-end, add the following to your winme.conf config file:

[ne2000]
ne2000=true
nicirq=10
backend=slirp

Setting up NE2000 networking in Windows ME

Windows ME does not detect the emulated NE2000 adapter during installation as it is not a ISA PnP or PCI adapter. As such you need to set it up manually afterwards, which is quite a bit more involved than in older Windows versions.

On the Windows ME desktop, click the "Start" button followed by "Settings" and "Control Panel". In the "Control Panel" window, click on the "view all Control Panel options." link on the left side. You should now see more options displayed. Double-click on the "Add New Hardware" icon.

Now let the Hardware Wizard detect new hardware. If it presents a question if the "Advanced Power Management support" listed is what you want to configure, select "No, the device isn’t in the list", and click the "Next >" button.

Windows ME Add Net Hardware

Now Windows ME will offer to search for the hardware. This search will not work, so select the option "No, I want to select the hardware from a list.", and click the "Next >" button.

Windows ME Add Net Hardware

You will now be asked for the hardware type to install, highlight "Network adapters", and click the "Next >" button.

Windows ME Add Net Hardware

You will be presented with a "Select Device" dialogue where you need to select "Novell/Anthem" for the manufacturer and "NE2000 Compatible" for the Model, and click the "OK" button.

Windows ME Select Device

Windows ME will now present you with a resource dialogue with completely invalid resources and no way to directly edit them. Click the "Next >" button to continue.

Windows ME Select Device

Now click the "Finish button" to complete the process.

Windows ME Select Device

Windows ME will now want to shut down for the changes to take effect. However since the resources that it set for the emulated NE2000 adapter are invalid, we should fix that first. As such click the "No" button.

Windows ME Confirm shutdown

Now double-click on the "System" icon, and you will now get the "System Properties" window. Select the "Device Manager" tab and highlight the "NE2000 Compatible" option and click on the "Properties" button.

Windows ME System Properties

You will now get a "NE2000 Compatible Properties" window where you need to select the "Resources" tab.

Now highlight "Interrupt Request" and click on the "Change Settings" button. Change the value to 10 as set with nicirq= in your winme.conf file and click the "OK" button.

Now highlight "Input/Output Range" and click on the "Change Settings button" Change the value to "0300-031F" and click the "OK" button.

Now close the "NE2000 Compatible Properties" window by clicking the "OK" button.

Windows ME System Properties

Windows ME will now ask you to shut down to apply the settings, click the "Yes" button to let it perform a shutdown. After the shutdown you will have to restart DOSBox-X.

Note
By default, TCP/IP will try to get its network configuration over DHCP, if you need to manually specify the settings you can do so, in "Control Panel", double-click "Network". Once it opens, highlight "TCP/IP", and click the "Properties" button to modify the TCP/IP settings.
Note
In the Network settings, there will also be a "Dial-Up Adapter" listed, which you can safely remove.
Note
If you don’t want the Windows logon dialog on startup, and don’t care for file and printer sharing, you can remove the "Client for Microsoft Networks" component from the Network configuration settings (although, it will complain that "Your network is not complete", which you can ignore).
Note
If you want to share files between Windows ME and Windows 10 on the network, have a look at this blog: SMB File Sharing between Win10 and Win98, but apparently this fails with the latest Win10 builds 2004 and 20H2.

If networking does not work, see Guide: Setting up networking in DOSBox-X

Emulated video adapter and video mode

The default video adapter that DOSBox-X emulates is the S3 Trio64, which is the best emulated video adapter that DOSBox-X offers, with the widest range of resolutions and colour depths. In addition, this video adapter is supported out-of-the-box in Windows ME, simplifying the installation process.

The available video modes with the S3 Trio64 driver are:

  • 4-bit colour (16): 640x480

  • 8-bit colour (256): 640x480, 800x600, 1024x768, 1152x864, 1280x1024 and 1600x1200

  • 16-bit colour (65536): 640x480, 800x600 and 1024x768

  • 32-bit colour (16.7M): 640x480 and 800x600

A few enhancements have been made to the emulated S3 Trio64, compared to a real S3 Trio64:

  • No real S3 Trio64 was ever produced with more than 4MB video memory, under DOSBox-X you can optionally configure 8MB.

  • The real cards never supported wide-screen resolutions, wide-screen VESA modes can optionally be enabled in DOSBox-X.

However, these enhancements cannot be used in Windows ME with the S3 video driver due to driver limitations. An updated S3 Trio64 video driver is not available for Windows ME. As such you will be limited to the above video modes with this driver.

VESA driver

These restrictions can be overcome by switching to the Universal VESA/VBE Video Display Driver (VBEMP).

First add the following lines to your DOSBox-X config file in the [video] section:

allow high definition vesa modes=true
allow unusual vesa modes=true
allow low resolution vesa modes=false

Download and extract the latest VBEMP driver package and install the driver from the 032MB directory.

With these settings modes up to 1920x1080 in 32bit colour, or 1920x1440 in 16bit colour are possible.

Note
Using the VBEMP driver does have a negative graphics performance impact, which when measured in WinBench96 Graphics WinMark, can be a reduction of up to 59%.

Emulated sound card

The emulated sound card used in this guide is the SB16 Vibra, instead of the default SB16. This is simply because the SB16 Vibra is an ISA PnP card, and therefore automatically detected by Windows. There is no other real advantage of using the emulated SB16 Vibra over the SB16.

Windows ME includes WDM driver version 4.90.2471.1. No newer driver appears to exist.

Note
One often heard complaint of the real SB16 Vibra is its CQM synthesis, which was used as a low-cost replacement of the OPL3 chip found on earlier cards. However, DOSBox-X does not really emulate the CQM, instead it uses the same OPL3 emulation as for the regular SB16 model. Therefore, the CQM sound quality issues with the real SB16 Vibra do not apply to DOSBox-X.

Enabling General MIDI

If you have a working DOSBox-X General MIDI setup, either emulated or real, you can use that in Windows ME.

Go to "Start", "Settings" and open "Control Panel", and then double-click on "Sounds and Multimedia". If you don’t see this option listed, click on the "view all Control Panel options" link on the left side.

Now on the "Audio" tab, change the "MIDI Music Playback" option to "Creative MPU-401", and click OK to close the window.

Windows ME MIDI setup

For more information about setting up MIDI support, see Guide: Setting up MIDI in DOSBox-X

Enabling printing

Print to PostScript

For the best print quality, you will want to print to a PostScript printer in Windows ME.

First, set up your DOSBox-X config to print to a file as such:

[dosbox]
captures=capture

[parallel]
parallel1=file timeout=2000

Next in Windows ME, select any PostScript printer such as the "QMS ColorScript 100 Model 30", during printer setup connected to LPT1.

When you print, a .prt file in your captures= directory will be created, which despite the extension, is actually a PostScript file.

On Linux and macOS, PostScript files are natively supported and can be viewed and printed. On a Windows host, it is necessary to install a separate PostScript viewer such as GSview.

Epson emulation

As an alternative, you can use the integrated Epson printer emulation, but the output quality will be significantly less compared to PostScript.

First, set up your DOSBox-X config to emulate an Epson printer as such:

[parallel]
parallel1=printer

[printer]
printer=true
printoutput=ps
multipage=true
timeout=2000

Next in Windows ME, select any Epson dot-matrix printer, such as the "Epson LQ-860+" option during printer setup connected to LPT1

Warning
Make sure that you do not configure the Epson printer driver for a graphics resolution other than 180x180, or the output will be corrupted.
Windows 95 - Epson Graphics Properties

When you print, a PostScript file with the .ps extension will be created in your current working directory. The emulated Epson printer settings can be adjusted as documented on the above linked wiki printing guide.

3dfx Voodoo

The emulated 3dfx Voodoo PCI device is enabled by default in DOSBox-X, and Windows ME includes a driver and will automatically detect it.

Windows ME includes a driver dated 4-23-1999. There is a 3.01.00 update available. After the update it will show a date of 4-29-1999.

If for some reason you do not want 3dfx Voodoo emulation, it can be disabled by adding the following lines to your DOSBox-X config:

[voodoo]
voodoo_card=false

Glide pass-through

DOSBox-X supports glide pass-through with Windows ME. There are however a few points you need to be aware of.

  • The DOSBox-X and glide-wrapper installed on the host need to be the same architecture. So, if you’re using a 64bit DOSBox-X, you need to use a 64-bit glide-wrapper.

  • The Linux SDL2 DOSBox-X does not work with OpenGlide, this is a limitation of OpenGlide (see OpenGlide issue #20). The work-around is to use the SDL1 DOSBox-X instead.

You need to set the following DOSBox-X config option:

[voodoo]
glide=true

You will also need a specially patched GLIDE2X.DLL which you can place in either the C:\Windows\System directory of Windows ME, or in the game directory. But be aware that some games come with their own GLIDE2X.DLL, which typically gets installed in the game directory. If so, you will have to remove this DLL file for glide pass-through to work.

For more detail on 3dfx Voodoo emulation, see the Guide: Setting up 3dfx Voodoo in DOSBox-X

Hard Disk Read-ahead optimization

In "System Properties", select the "Performance" tab, and click the "File System…​" button. A separate "File System Properties" window will open. On the "Hard Disk" tab you can specify the Read-ahead optimization.

Based on benchmark results (WinBench 96), it seems that setting this to "None" gives the best performance in combination with DOSBox-X, although the difference is marginal. This is no doubt because the host system is better at caching then the Windows ME cache function.

Outstanding issues

  • "System Properties" → "Performance" complains about

    • Compatibility-mode paging reduces overall system performance.

    • Drive A is using MS-DOS compatibility mode file system.

    • Drive C is using MS-DOS compatibility mode file system.

  • In device manager, a problem with APM support: "The VPOWER.XVD device driver(s) for this device could not load the device driver (Code 2)".

  • NE2000 adapter is not automatically detected, and even if you manually add it, it takes the wrong resources (which needs to be adjusted in device manager).

  • core=dynamic_x86 is not compatible at this time with Windows ME