On Sun, Mar 9, 2025 at 7:50 AM hms--- via Freedos-user
<freedos-user@lists.sourceforge.net> wrote:
>
> Hi there
[..]
>
> I have been using QEMU and FreeDos up to now. There are several
> drawbacks compared with dosemu2. Copying a large number of files to the
> image and retaining file timestamps is a problem. I achieve this by
> first copying to the access drive, then starting FreeDos in QEMU and
> then using XCOPY to transfer files to the C: Drive (image). This takes
> considerable time. I have had little to no success exporting files.
> Writing to the access drive usually crashes QEMU. And finally, FreeDos
> under QEMU is slightly slower than dosemu2. The stability of dosemu2
> remains to be seen.



I use QEMU to run FreeDOS on my Linux system, and it is admittedly a
bit difficult to get used to because you need to "configure" or
"build" the virtual machine using command line options.

Here are the commands I use:

(1) To create a new virtual disk, such as to install a fresh copy of
FreeDOS, I might type this: (I'll make it 20MB for this example
because I'm actually typing the commands while I install a new FreeDOS
instance .. but change that to 500MB if you want to use a bigger
virtual disk)

$ qemu-img create -f qcow2 freedos.qcow2 20M

You'll see output that looks like this:
Formatting 'freedos.qcow2', fmt=qcow2 cluster_size=65536
extended_l2=off compression_type=zlib size=20971520 lazy_refcounts=off
refcount_bits=16


(2) To install FreeDOS 1.4 rc3 with the LiveCD, you need to "build" a
virtual machine with some memory, and configured with at least the
LiveCD and the virtual disk. Don't forget to use KVM or it will be
REALLY SLOW:

$ qemu-system-i386 -enable-kvm -m 32 -cdrom FD14LIVE.iso -hda
freedos.qcow2 -boot order=d

This configures the virtual machine with 32MB memory, and uses the
FreeDOS 1.4 rc3 LiveCD and the virtual hard disk I just made in step
1. The '-boot order=d' tells QEMU to boot only from the CD drive
(which is always referred to in the 'order=' option as 'd' .. the
first hard disk is always referred to as 'c' .. the first floppy is
always referred to as 'a' .. the network is always referred to as
'n'). You can give '-cdrom' and '-hda' in either order.


(3) Go through the usual FreeDOS installation process. Because I'm
using a small (20MB) virtual disk, I just did the "plain DOS"
installation.

(4) When the install is finished, use the "Return to DOS" option and
type 'shutdown' at the DOS prompt inside FreeDOS to stop the virtual
machine.

(5) Now that you've installed FreeDOS, anytime you want to run
FreeDOS, you start QEMU by booting from the virtual disk. You can
optionally configure the machine to use the LiveCD or the BonusCD, so
you can use FDIMPLES to install other packages. Here's the command
line to use the LiveCD, but boot from the virtual disk:

$ qemu-system-i386 -enable-kvm -m 32 -hda freedos.qcow2 -cdrom
FD14LIVE.iso -boot order=c


You can use other options too. For example, to use the Linux local
time as your virtual machine time, add the '-rtc' option like this:

$ qemu-system-i386 -enable-kvm -m 32 -hda freedos.qcow2 -cdrom
FD14LIVE.iso -boot order=c -rtc base=localtime


You said you don't require sound, so I won't show the options to
configure that (it requires a few options to connect everything
together) but that's possible too. I emulate a PC speaker,
SoundBlaster16, and AdLib.


If you need to copy files to (or from) the FreeDOS virtual disk, you
should only do this WHEN THE VIRTUAL MACHINE IS NOT RUNNING. Otherwise
you will corrupt the virtual disk. I find the easiest way to do this
is with the 'guestmount' tool from libguestfs-tools. (If you don't
have this by default on your system, you can install it with your
Linux package manager.)

The 'guestmount' command has a particular command line. First, you
"add" a virtual disk to work with, using the '-a' option. Then you
need to give a partition in the virtual disk that you want to mount,
using the '-m' option. Note that the '-m' option uses "/dev/sda1"
notation to mean the first partition in the virtual disk, even though
this isn't really your system's /dev/sda1.

For a reasonably sized virtual disk like 20MB or 500MB, FreeDOS
configures the disk with just one partition. That means if I wanted to
exchange files with my freedos.qcow2 disk, I need to "mount" the
"/dev/sda1" partition on that virtual disk to a directory (which I'll
call 'freedos') like this:

$ mkdir freedos
$ guestmount -a freedos.qcow2 -m /dev/sda1 freedos


This might take a second, so don't panic if it doesn't return right away.

Now I can copy files to/from the FreeDOS virtual disk, using a Linux
file manager or from the command line. If you want to preserve file
timestamps, don't forget to use '-p' (preserve) with the 'cp' command
on Linux. I can even edit a new file on the virtual disk using Linux
'ed', because it's just another Linux directory at this point:

$ ed freedos/hello.bat
freedos/hello.bat: No such file or directory
i
@ECHO OFF
ECHO Hello World!
.
w
28
q


..but I should probably use 'unix2dos' to convert that to DOS format,
because that's a text file that has Linux line endings:

$ unix2dos freedos/hello.bat
unix2dos: converting file freedos/hello.bat to DOS format...


Then unmount the directory, and you can use the virtual disk in QEMU as normal.

$ guestunmount freedos



And not that it matters, but my HELLO.BAT file works fine after I
created it on the FreeDOS virtual disk from Linux:

C:\>type hello.bat
@ECHO OFF
ECHO Hello World!

C:\>hello
Hello World!


_______________________________________________
Freedos-user mailing list
Freedos-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-user

Reply via email to