View source | |
# 2025-02-22 - Install SvarDOS In Virtual Machine | |
I recently read an article about SvarDOS: | |
SvarDOS: DR-DOS Is Reborn As Open Source Operating System | |
DR-DOS on Wikipedia | |
SvarDOS web page | |
I installed SvarDOS both on real hardware and in two virtual | |
machines, and it went pretty well. I loved the minimal but highly | |
functional default configuration. | |
In this log entry, i will walk through the process of installing | |
SvarDOS in qemu and dosbox-x running on Slackware64 15.0. I am | |
using dosbox-x-2025.02.01 and qemu-9.2.0, which are the latest | |
versions from SlackBuilds at the time of writing this log entry. | |
I also use kpartx from multipath-tools to mount the disk images. | |
dosbox-x-2025.02.01 SlackBuild | |
qemu-9.2.0 SlackBuild | |
multipath-tools-0.8.7 SlackBuild | |
Download the SvarDOS stable build (20240915) and package ISO. | |
SvarDOS 1.44M floppy disk | |
SvarDOS package repository ISO | |
I placed these in ~/dist/dos/os/svardos/20240915/ and unzipped the | |
floppy image. | |
# Install SvarDOS using Qemu | |
SvarDOS supports FAT32, but i avoid it because it can be | |
pathologically slow to repair using the free dosfsck.exe. I accept | |
the limitations of FAT16B as a trade-off for better compatibility and | |
maintenance. This limits partition sizes to 2G using the SvarDOS | |
installer. | |
There's a lot of FAT filesystem lore on the Internet. For example, i | |
read that keeping the partitions slightly under 1G results in a | |
smaller cluster size, which greatly reduces disk space overhead, | |
resulting in more space available for data. Since i am using a | |
virtual machine with practically limitless storage, i consider this | |
a micro-optimizations. | |
Below is a table of FAT16 cluster size vs disk space efficiency. | |
Cluster Size Efficiency FAT16 Partition Size | |
------------ ---------- -------------------- | |
2K 98.4% 0-127 MB | |
4K 96.6% 128-255 MB | |
8K 92.9% 256-511 MB | |
16K 85.8% 512-1023 MB | |
32K 73.8% 1024-2047 MB | |
64K 56.6% > 2047 MB | |
http://www.project9.com/fat32/ | |
I believe Windows NT could format FAT16 partitions up to 8G using 64K | |
cluster sizes, but DOS was limited to 2G using 32K clusters. | |
* * * | |
Later in these instructions i answer "Y" to permit fdisk to create a | |
partition with the maximum size. With the 2G disk image, this uses | |
a 32K cluster size, which is compatible with other versions of DOS. | |
With a larger disk, it might use a 64K cluster size, which is | |
not compatible with some versions of DOS. I might need to answer "N" | |
and enter 2000 as the partition size, to keep the partition under 2G. | |
I can verify the cluster size of a FAT16 filesystem using the | |
CHKDSK command. | |
C:\>chkdsk c: /s | find "every cluster" | |
32.768 bytes in every cluster | |
32.768 means the c: drive has the more compatible 32K cluster size. | |
* * * | |
My first DOS hard disk was 80M. In comparison, 2G should be more than | |
enough. I use the raw disk image format for maximum compatibility | |
with various virtual machine software. I use a sparse file to | |
conserve space on the host system. | |
$ mkdir -p Qemu/svardos | |
$ cd Qemu/svardos | |
$ truncate -s 2G svardos.raw | |
The last truncate command creates the 2G sparse raw disk image. | |
Note, I didn't have to use the truncate command! Alternatives | |
are the dd or fallocate commands. | |
* dd if=/dev/zero of=svardos.raw bs=1 count=0 seek=2G | |
* fallocate -l 2G svardos.raw | |
Create a shell script and run it to start qemu. I use new-style qemu | |
configuration options rather than the easier compatibility options. | |
This allows a greater degree of control. | |
$ cat >qemu-svardos.sh <<__EOF__ | |
#!/bin/sh | |
DISK="/home/ben/Qemu/svardos/svardos.raw" | |
CDROM="/home/ben/dist/dos/os/svardos/20240915/sv-repo.iso" | |
FLOPPY="/home/ben/dist/dos/os/svardos/20240915/disk1.img" | |
MACH="pc-i440fx-9.2,dump-guest-core=off,mem-merge=off,usb=off" | |
SAND="on,obsolete=deny,elevateprivileges=deny,spawn=deny" | |
SAND="${SAND},resourcecontrol=deny" | |
SDL_AUDIODRIVER=alsa qemu-system-i386 \ | |
-accel kvm \ | |
-machine "$MACH" \ | |
-machine pcspk-audiodev=1 \ | |
-overcommit mem-lock=off \ | |
-no-user-config \ | |
-sandbox "$SAND" \ | |
-msg timestamp=on \ | |
-cpu max \ | |
-m 32M \ | |
-global i8042.kbd-throttle=on \ | |
-audiodev alsa,id=1 \ | |
-device sb16,audiodev=1 \ | |
-device VGA \ | |
-drive format=raw,file="$FLOPPY",if=none,id=floppy1 \ | |
-device floppy,unit=0,drive=floppy1 \ | |
-global isa-fdc.bootindexA=0 \ | |
-drive format=raw,file="$DISK",if=none,id=disk1 \ | |
-device ide-hd,drive=disk1,bootindex=1 \ | |
-drive file="$CDROM",media=cdrom,if=none,id=cd1 \ | |
-device ide-cd,drive=cd1,bootindex=2 \ | |
-display sdl,gl=on,grab-mod=rctrl \ | |
-rtc base=localtime | |
__EOF__ | |
$ chmod a+rx qemu-svardos.sh | |
$ ./qemu-svardos.sh | |
At the welcome screen, I press Enter to select English. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At the keyboard layout screen, I press Enter to select English (US). | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At the installation screen, I press Enter to Install SvarDOS. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At the partition screen, I select Run the FDISK partitioning tool, | |
then press Enter. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At FDISK introduction, I press N to disable FAT32, | |
then press Enter. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At FDISK Options, I press Enter to Create DOS partition or | |
Logical DOS Drive. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At Create DOS Partition or Logical DOS Drive, I press 1 to | |
Create Primary DOS Partition, then press Enter. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At Create Primary DOS Partition, I press Enter to use the maximum | |
available size for a Primary DOS Partition and make the partition | |
active. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At the partition screen, I press ESC to continue. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At FDISK Options, I press ESC to exit FDISK. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At You MUST restart your system for your changes to take effect, | |
I press ESC to exit FDISK. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At Your computer will reboot now, I press Enter. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At the welcome screen, I press Enter to select English. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At the keyboard layout screen, I press Enter to select English (US). | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At the installation screen, I press Enter to Install SvarDOS. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At the disk screen, I press Enter to select C: [2047 MiB, hda0] | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At the format screen, I press Enter to Format drive C: | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
At the installation of SvarDOS to C: screen, I press Enter | |
to Install SvarDOS. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
It installs 32 packages. When it is done, it shows a screen | |
Your computer will reboot now. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I close the QEMU window to power off the virtual machine. | |
This is equivalent to turning off the power while a PC is running. | |
By default, SvarDOS does synchronous I/O and does not use a cache. | |
When at the prompt, the data is already written to disk, so it is OK | |
to abruptly power off the machine. | |
I edit the shell script to make the floppy the last boot option. | |
$ ed qemu-svardos.sh | |
1798 | |
/bootindexA/s/=0/=9/ | |
w | |
1798 | |
q | |
I run the shell script to start qemu again: | |
$ ./qemu-svardos.sh | |
It takes a moment to do the post-install steps. When finished, | |
it shows SvarDOS has been installed. Restart your computer now. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I run FDAPM to do a cold boot. | |
C:\TEMP>\SVARDOS\FDAPM COLDboot | |
It boots to the Welcome to SvarDOS screen. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
The first thing i would like to do is enable access to the optical | |
drive. Unfortunately, the driver is not included on the install | |
floppy. I will need to copy it in place from the Linux host. I | |
close the QEMU window to power off the virtual machine. | |
I create scripts to mount and unmount the disk image on the Linux | |
host. My uid and gid are both 1000. Adjust the script to match | |
yours. | |
$ cat >mount-svardos.sh <<__EOF__ | |
#!/bin/sh | |
disk="/home/ben/Qemu/svardos/svardos.raw" | |
log="/mnt/fuse/svardos.log" | |
dir="/mnt/svardos" | |
part="1" | |
# truncate log | |
cat /dev/null >"$log" | |
losetup -f "$disk" | |
# wait a second, then probe the partitions | |
sleep 1 | |
loop=$(losetup -j "$disk" | cut -d : -f 1) | |
kpartx -av "$loop" >"$log" 2>&1 | |
# find the loop device | |
loopdev=$(awk -v p=$part ' | |
/^add map / { | |
i++ | |
parts[i] = $3 | |
} | |
END { | |
print parts[p] | |
}' "$log") | |
loopdev="/dev/mapper/$loopdev" | |
# mount it | |
mount -o uid=1000,gid=1000 "$loopdev" "$dir" | |
__EOF__ | |
$ chmod a+rx mount-svardos.sh | |
$ cat >unmount-svardos.sh <<__EOF__ | |
#!/bin/sh | |
disk="/home/ben/Qemu/svardos/svardos.raw" | |
dir="/mnt/svardos" | |
# unmount the filesystem | |
umount "$dir" | |
# find loop device | |
loop=$(losetup -j "$disk" | cut -d : -f 1) | |
# detach loop device | |
kpartx -d "$loop" | |
losetup -d "$loop" | |
__EOF__ | |
$ chmod a+rx unmount-svardos.sh | |
To actually mount this disk image, i need to run these scripts as | |
user root. The first time around i need to create directories for | |
the mount point and log file. | |
$ su - | |
# mkdir -p /mnt/svardos | |
# mkdir -p /mnt/fuse | |
Next i mount the disk image, the package ISO, copy the CD driver | |
package, unmount everything, and exit the root shell. | |
# /home/ben/mount-svardos.sh | |
# mount -o loop,ro -t iso9660 \ | |
/home/ben/dist/dos/os/svardos/20240915/sv-repo.iso /mnt/cdrom | |
# cp /mnt/cdrom/videcdd.svp /mnt/svardos/ | |
# umount /mnt/cdrom | |
# /home/ben/unmount-svardos.sh | |
# exit | |
I boot SvarDOS to the welcome screen again. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I install the CD driver packages. | |
C:\>pkg install videcdd.svp | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I use the excellent SVED editor to enable the CD driver in CONFIG.SYS. | |
C:\>copy CONFIG.SYS CONFIG.BAK | |
C:\>sved CONFIG.SYS | |
I use the arrow keys to navigate to the ;DEVICE=C:\DRIVERS\VIDECDD... | |
line. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I press Backspace to delete the leading ; character, uncommenting line | |
DEVICE=C:\DRIVERS\VIDECDD\VIDE-CDD.SYS /D:SVCD0001 | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I press Esc to open the SVED menu, press Down to select Save, and | |
press Enter. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I press Esc to open the SVED menu, press Up to select Quit, and | |
press Enter. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I use SVED to enable the CD driver in AUTOEXEC.BAT. | |
C:\>copy AUTOEXEC.BAT AUTOEXEC.BAK | |
C:\>sved AUTOEXEC.BAT | |
I use the arrow keys to navigate to the REM SHSUCDX ... line. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I press the Backspace key 4 times to remove the "REM " prefix. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I press Esc to open the SVED menu, press Down to select Save, and | |
press Enter. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I press Esc to open the SVED menu, press Up to select Quit, and | |
press Enter. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I use FDAPM to do a cold boot. | |
C:\>SVARDOS\FDAPM COLDboot | |
I install the unzip program from CD. | |
C:\>pkg install D:\unzip.svp | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I get the disk geometry from FDISK. | |
C:\>FDISK /INFO | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
Note the text "geometry 520/128/63" in the output. | |
I close the QEMU window to power off the virtual machine. | |
# Configure SvarDOS in DOSBox-X | |
I run dosbox-x to create an initial default configuration. | |
$ dosbox-x | |
This opens an initial DOSBox-X window. | |
gopher://tilde.pink/I/~bencollver/log/2025-02-22-install-svardos-in-virtual-mac… | |
I exit DOSBox-X. | |
Z:\>exit | |
I make a backup copy of the DOSBox-X default configuration. | |
$ cp .config/dosbox-x/dosbox-x-2025.02.01{,-orig}.conf | |
I make the SvarDOS specific DOSBox-X configuration. | |
$ cp .config/dosbox-x/dosbox-x-2025.02.01{,-svardos}.conf | |
I edit the SvarDOS specific DOSBox-X configuration. I change the | |
memory size from 16 to 32M to match the qemu virtual machine. | |
DOSBox-X needs the geometry for the raw disk image. Note that FDISK | |
in qemu reported "geometry 520/128/63" and that the sector size is | |
512 bytes. Thus the parameters "-size 512,63,128,520". | |
$ ed .config/dosbox-x/dosbox-x-2025.02.01-svardos.conf | |
104643 | |
/^memsize = 16/s/16/32/ | |
$ | |
a | |
imgmount c /home/ben/Qemu/svardos/svardos.raw -size 512,63,128,520 | |
imgmount d /home/ben/dist/dos/os/svardos/20240915/sv-repo.iso -t iso -fs iso | |
boot c: | |
. | |
w | |
104814 | |
q | |
I create a shell script and run it to start dosbox-x. | |
$ cat >dosbox-svardos.sh <<__EOF__ | |
#!/bin/sh | |
dosbox-x -conf /home/ben/.config/dosbox-x/dosbox-x-2025.02.01-svardos.conf | |
__EOF__ | |
$ chmod a+rx dosbox-svardos.sh | |
$ ./dosbox-svardos.sh | |
That's it! | |
# Configure SvarDOS Real Mode (16-bit) | |
I can optionally configure dosbox-x to emulate a 16-bit 8086 processor. | |
To do so, it is necessary to disable HIMEMX.SYS in CONFIG.SYS because it | |
requires a 32-bit processor. For the same reason it is also | |
necessary to disable the CDROM driver in CONFIG.SYS and AUTOEXEC.BAT. | |
Then i edit the dosbox-x-2025.02.01-svardos.conf file, changing | |
memsize = 1 and cputype = 8086 to specify an 8086 processor with 1M of | |
memory. | |
Below is an article about CD-ROM drives on retro hardware. The CD-ROM | |
drives on 8086 and 80286 PCs were typically single-speed drives using | |
proprietary controllers and drivers. | |
CD-ROM Drives In 286 And 386 PCs | |
# Notes | |
These steps create two virtual machines, one using dosbox-x and the | |
other using qemu. These both use the same disk image. Make sure to | |
power off one before powering on the other. | |
The qemu virtual machine is accelerated using Linux KVM, which runs | |
faster. | |
The dosbox-x virtual machine provides a more accurate BIOS. If your | |
keyboard has a Num Lock key, then you can use Alt Codes to enter | |
special characters in DOSBox-X. | |
Alt code | |
Alt codes do not work in qemu nor VirtualBox because of BIOS bugs. | |
VirtualBox BIOS bug that breaks Alt codes | |
On a tangent, the calvin editor suffers screen corruption because of | |
a bug in VirtualBox's CGA BIOS, INT 10, AH 05h, | |
SELECT ACTIVE DISPLAY PAGE. | |
VirtualBox CGA BIOS bug and calvin workaround | |
I intentionally avoided network configuration in order to | |
"keep it simple." | |
The SvarDOS shell is brutally minimal. The package CD includes 4dos | |
for a more full-featured shell. | |
tags: bencollver,retrocomputing,technical | |
# Tags | |
bencollver | |
retrocomputing | |
technical |