Jump to content
Strawberry Orange Banana Lime Leaf Slate Sky Blueberry Grape Watermelon Chocolate Marble
Strawberry Orange Banana Lime Leaf Slate Sky Blueberry Grape Watermelon Chocolate Marble

MSFN is made available via donations, subscriptions and advertising revenue. The use of ad-blocking software hurts the site. Please disable ad-blocking software or set an exception for MSFN. Alternatively, register and become a site sponsor/subscriber and ads will be disabled automatically. 

Sign in to follow this  

How to run MS-DOS: In both a virtual machine and natively

Recommended Posts

ppgrainbow    7

For a while, I've been experiencing ways how to run the MS-DOS operating system in both a virtual machine and natively. In this example, I created a MS-DOS 7.1 virtual machine under DOSBox and I linked the disk image in GRUB4DOS so that I can natively boot the OS.

Here's how you can do it:


1. For hard disk image and proper CHS geometry support, download DOSBox Megabuild 6 (DOSBox MB6), if you haven't already done so.

2. Download the latest stable version of GRUB4DOS. While the latest version of GRUB4DOS is version 0.4.6, I wouldn't recommend constantly updating the bootloader.

3. I used Windows 2000 as the example host OS to dual boot between Win2K and GRUB4DOS. Extract that GRLDR file onto the root directory of the boot drive. Unset the attributes and modify the boot.ini file to include the following:

[boot loader]
default=multi(0)disk(0)rdisk(0)partition(1)\%WINDOWS directory%

[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows 2000 (or Windows XP)" /fastdetect

4. Place the MENU.LST file in the root directory of the boot drive in order to make the dual booting work.

5. Execute DOSBox MB6, then in the DOSBox prompt type in IMGMAKE X:\BOOT.IMG -t hd -chs c,h,s -nofs to create the hard disk image. Disk geometry is limited to 1,023 cylinders, 255 heads and 63 sectors per track. However, the IMGMAKE utility is limited to 2,047 MB (520 cylinders, 128 heads and 63 sectors per track).

The -nofs parameter is important as you need to create a blank disk image in which it will be prepared using FDISK and formatted later on. The best example is creating a hard disk image that has 1,000 cylinders, 4 heads and 17 sectors per track as follows:

IMGMAKE C:\BOOT.IMG -t hd -chs 1000,4,17 -nofs

The end result is that it will create a hard disk image with 68,000 sectors for a total hard drive capacity of 34,816,000 bytes (33.2 MB).

6. Go to Bootdisk.com and download either the Windows 98 or Windows 98 Second Edition boot disk image. You can find boot disk images at this page here: http://bootdisk.com/bootdisk.htm

Using the Windows Millennium boot disk (either the one found on BootDisk.com) or the files that were created from a Windows XP boot disk is not recommended.

Also, be aware that using MS-DOS 6.22 (or below) to natively boot GRUB from on modern computers will not work properly, if not at all.

7. Now that you're all set, open up the dosbox.conf (or any other DOSBox configuration file) and in the [autoexec] section, add the following in the [autoexec] category. This example will be the boot.conf file in the C:\DOSBOX directory.

# Lines in this section will be run at startup.
# You can put your MOUNT lines here.

imgmount 0 "C:\WIN98SEC.IMG" -t floppy -fs none

imgmount 2 "C:\BOOT.IMG" -t hdd -fs none -size 512,17,4,1000

# Boot from drive A or drive C.

boot -l a

8. Execute the following command to properly access the floppy disk image and the hard disk image:

C:\DOSBox\DOSBox.exe -noconsole -conf "C:\DOSBox\boot.conf"

This will take you to the A:\ prompt in the DOSBOX MB6 VM.

9. Type FDISK to set up the hard disk image. When doing so, you'll be greeted with this message:

Microsoft Windows 98
Fixed Disk Set Program
©Copyright Microsoft Corp. 1983 - 1998

FDISK Options

Current fixed disk drive: 1

Choose one of the following:

1. Create DOS partition or Logical DOS Drive
2. Set active partition
3. Delete partition or Logical DOS Drive
4. Display partition information

Enter choice: [1]

To create a drive letter inside the hard disk image, all you have to do is select Option 1 and by doing so, this will take you to the following menu:

Create DOS Partition or Logical DOS Drive

Current fixed disk drive: 1

Choose one of the following:

1. Create Primary DOS Partition
2. Create Extended DOS Partition
3. Create Logical DOS Drive(s) in the Extended DOS Partition

Enter choice: [1]

Once again, select Option 1 to create a primary DOS partition and by doing so, this will setup a primary partition of size specified by the user. The boot drive will be drive C.

If for some reason, you want to create additional drive letters inside the hard disk, don't use all of the available disk space and leave the rest for a extended DOS partition. Select Option 2 to setup an extended DOS partition to reclaim the remaining disk space on the hard disk image and lastly select Option 3 to setup the logical DOS partitions for which it will make up the available disk space within the extended DOS partition.

And now that the partition(s) on the hard disk is created, you will have to make the drive Active. Press Escape from the DOS Partition menu and select Option 2 from the main menu.

Once you have set up the drive(s) and set the main drive active, shut down DOSBox MB6, by pressing CTRL + F9. Do NOT press CTRL + ALT + HOME to reboot as you will lose the partition information that you created and you will have to start all over again!

10. Rerun DOSBox MB6 and boot from the floppy disk image. Type FORMAT C: /S to format the hard disk image and make it bootable. When you're finished, shutdown DOSBox MB6. In the botton line of the [autoexec] category of boot.conf change the boot parameter to read "boot -l c" in which it will change the boot drive from Drive A to Drive C.

11. Use WinImage to extract and edit the contents of the MSDOS.SYS file. Now since DOSBox has problems displaying the Windows 98 boot logo, you need to edit the file to read the following:


;The following lines are required for compatibility with other programs.
;Do not remove them (MSDOS.SYS needs to be >1024 bytes).

Since there is no Windows installation installed on the boot drive, this edit will (1) prevent MS-DOS from booting the GUI, (2) displaying the Windows 98 logo and (3) will disable the log. The lines below it are required for compatibility with other programmes and must not be removed. MSDOS.SYS needs to be 1 KB or greater.

Lastly, copy all of the DOS-based files from a Windows 98 installation (can be found under C:\WINDOWS\COMMAND directory) and place it in a temporary directory such as C:\WIN98.TMP. Using WinImage, make a directory inside the BOOT.IMG hard disk image called \DOS and insert the files in that directory.

12. Now that you're finished installing the files required to run MS-DOS 7.1, you have to use GRUB in order for it to boot the drive natively. Edit the MENU.LST file in the root directory with the following:

title Microsoft MS-DOS 7.1

find --set-root boot.img
map --ram-drive=0x9f
map --rd-base=0x1000000
map --rd-size=0x1000000
map (fd0) (hd0) (hd1) (rd)
map (rd) (hd1) (hd0) (fd0)
map --disable-lba-mode --heads=4 --sectors-per-track=17 /boot.img (hd0)
map --floppies=1
map --harddrives=1
map --hook
map --a20-keep-on=1
chainloader (hd0)+1
rootnoverify (hd0)

With this edit, it will access the BOOT.IMG file with 4 heads and 17 sectors per track, use the RAM drive value to 0x9F set the --rd-base and --rd-size values to 0x1000000 thus reducing the RAM available to 16 MB. 16 MB is the bare minimum for booting DOS inside GRUB4DOS on a modern PC. Set anything lower than 0x1000000 and MEM will improperly report how much memory is available to the end user.

Additionally, only one floppy drive and one hard drive will be accessed.

If you receive a error message "Error 60: File for drive emulation must be in one contiguous disk area" use the Contig utility to defragment the drive and make the specified file contiguous on the disk image. When that's done, you will be able to succesully boot off of the BOOT.IMG image natively.

To restart the computer out of MS-DOS, press CTRL+ALT+DELETE.


Unlike booting MS-DOS from a virtual machine, booting MS-DOS from GRUB4DOS as a dual boot option has restrictions.

1. You cannot use a expanded memory manager (such as EMM386.EXE) on the hard disk image. Doing so will throw in a "Bad or Missing Command Interpretor" error message and it will ask to insert a boot disk with COMMAND.COM.

As far as I know, base memory is limited to 629 KB. To conserve base memory, use as few device drivers as possible such as a CD-ROM or a mouse driver.

2. Windows 3.0 will only work in either Standard Mode or Real Mode and will hang if more than 16 MB of system memory is available. This is the case when many modern PCs have far more than 16 MB of memory installed.

In Windows 3.1, Standard Mode is the only option as Real Mode support was dropped. With the lack of expanded memory manager support, Windows 3.0/3.1 will treat the PC as it if was a Intel 80286.

You will have to remove files that require Intel 80386 (or compatibile) support in order to make it run in Standard Mode or Real Mode (Windows 3.0 only).

Windows for Workgroups 3.11 will NOT work at all when booting under GRUB4DOS as Standard Mode support has been removed.

3. To make Windows 3.0 and Windows 3.1 work under MS-DOS 7.1, use the utility called OSR2FIX. This patch will enable Windows 3.0 or Windows 3.1 to run under MS-DOS 7.1 and on a FAT32 partition.

4. Most modern video card vendors stopped providing video driver support for Windows 3.0 and Windows 3.1. Under Windows 3.1, if you want high resoultion graphics, use the generic SVGA driver and download the vgapatch tool to make it work.

5. There is no support for sound card or network drivers (either under MS-DOS or Windows 3.1) when run under GRUB4DOS.

I apologise if this tutorial is vague, but I hope that this is enough information for this experience. If you have any questions, comments or suggestions for improvements in this tutorial thread, please let me know.

Share this post

Link to post
Share on other sites

jaclaz    906

These are "strange":

map (fd0) (hd0) (hd1) (rd)map (rd) (hd1) (hd0) (fd0)

Syntax is map from device to device.


map (fd0) (hd0)map (rd) (hd1)

Will probably be in effect.


Share this post

Link to post
Share on other sites
ppgrainbow    7

These are "strange":

map (fd0) (hd0) (hd1) (rd)map (rd) (hd1) (hd0) (fd0)

Syntax is map from device to device.


map (fd0) (hd0)map (rd) (hd1)

Will probably be in effect.


Thank you very much for the info.

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.