FreeDos with QBASIC From a Single Floppy

FreeDos with QBASIC From a Single Floppy
I remember that FreeDOS had a floppy boot disk. What if I could hack it for an embedded DOS OS and even fit QuickBASIC in? Finally run it on the EeePC in a true Cyberpunk style?

It turns out it is possible and cooler than I thought!

Customizing DOS is super easy and intuitive. There are some small things that needs to be done to fit just enough stuff onto the floppy and still end up with working system.

I will guide you with few easy steps.

Project Goals

You will create an boot disk with OS that boots straight to the BASIC environment. With a nice boot screen.

High level goals

  • working DOS OS
  • text editor included
  • QuickBASIC IDE included
  • compiling .EXE files
  • ram disk
  • initialization program
  • fits on 1.44MB floppy

Software Included

Latest FreeDOS stripped to basic functionality. Only have two advanced programs.

FreeDOS EDIT 0.9a

This is a very nice word processor. It takes 67KB but it's very useful for editing configuration or README files. That's why I keep it.

Microsoft (R) QuickBasic 4.50

I don't know the license for this files but they are available on many sites. To fit it on the floppy I removed all examples and help files. In the end there is only this IDE, linker and compiler. Enough to make .EXE programs. It takes 666KB of space.

Minimal QuickBASIC 4.5 is 666kB in size

Initialization Program

Boot screen of the initialization program

I really wanted to have this modern boot feeling. I created simple BASIC program for that. Additionally it copies the intro/example basic file to the ram disk and then starts QBASIC environment for it.

You will be able to customize this after first boot. Just edit source files and compile new INIT.EXE.

Building FreeDOSxQBASIC

Now the fun parts begins. Grab your terminal and let's start.

Download and extract those:

When you got all the needed files it's time to customizing FreeDOS. Go to the directory where you extracted the image and mount it.

cd FD13-Floppy
sudo mount -o loop FD13FLOP.img /mnt
cd /mnt

Now it's time to remove everything non essential to our project.

sudo rm setup.bat 
sudo rm -rf freedos/nls
sudo rm -rf freedos/setup/
cd freedos/bin/
sudo rm fdramdrv.bat mbrzap.bat udvd2.sys cdrom.bat fdimples.exe format.exe fdinst.exe fdisk.ini fdiskpt.ini gcdrom.sys more.exe fdisk.exe grep.exe srdisk.exe welcome.bat zip.exe jemmex.exe jemm386.exe fc.exe xcopy.exe
cd ../..

Now replace fdauto.bat with this:

@echo off
LBACACHE.COM buf 20 flop


alias reboot=fdapm warmboot
alias reset=fdisk /reboot
alias halt=fdapm poweroff
alias shutdown=fdapm poweroff


Easiest way is to run:

sudo nano fdauto.bat 

Remove everything and paste the code above.

In the middle of that code the SHSURDRV /D:512K,D creates ram disk. Change 512K to anything bigger if you need to. And have enough RAM.

Last lines clears the screen and run Initialization Program. Copy INIT.EXE and INIT.BAS to the floppy.

cd ~/Downloads/init/

Lastly you need the minimal QBASIC.

cd ~/Downloads/qb45/QB45/
If you want quick help (not full manual) and you want sacrefice 172KB of space then copy /HLP/QB45ENER.HLP and /HLP/QB45QCK.HLP to /mnt also
For mouse support copy MOUSE.EXE to /mnt/freedos/bin/

And that's it! Detach and rename the image and you can do the first boot with it.

sudo umount /mnt
cd ~/Downloads/FD13-Floppy
mv FD13FLOP.img FreeDOSxQBASIC.img


Emulate it using QEMU. The -m parameter is for RAM size. 2MB in this example.

qemu-system-i386 -fda FreeDOSxQBASIC.img -m 2
Welcome/Example file after first boot


Insert floppy into the (external) drive and run dd command.

sudo dd if=FDQB.img of=/dev/sdb bs=1MB

In my computer the FDD is /dev/sdb. It can be different on your machine. Check it first!

FreeDOSxQBASIC booted on EeePC 701SD


Don't bother doing all of this? Download the final image.

Cyber Netbook

Especially for this project I attached the floppy drive to my EeePC 701D for that Cyberpunk aesthetics! Now I can hack BASIC programs on the go :)

Booting FreeDOSxQBASIC on Asus EeePC 901SD