User Tools

Site Tools



FreeDOS is a trademark of Jim Hall. FreeDOS is released under the GNU General Public License.

What is it? MS-DOS compatible! An operating system you can understand. `FreeDOS is an open source DOS-compatible operating system that you can use to play classic DOS games, run legacy business software, or develop embedded systems. Any program that works on MS-DOS should also run on FreeDOS.` from their website.

Why use it? - Run old DOS applications and games - Programming apps and graphics is simpler. It's a much smaller operating system so you can actually understand it better. - To learn more about operating systems, history, programming, graphics - For fun of retro computing - Portable - anyone can run it, low system requirements. Run it on a 40 year old computer up to a modern 2021 computer. The x86 chips we have in all of our desktops are backwards compatible to the 16-bit 8086. They will mimic it. It will run on anything running current era hardware with x86 instructions! Really cool!

DosBox vs FreeDOS

DosBox vs FreeDOS (One is an emulator meant to run on a host operating system, one is an actual OS that runs on hardware or a virtual x86 machine)


Minimal manual installation

Video on installing manually:


  1. Partition the disk with fdisk
  2. Create a file system on the partition with format
  3. Make the disk bootable and copy kernel with sys
  4. Optionally, install any desired packages by unzipping and copying them over
# Partition the disk, create file system, make bootable
# and install the kernel.sys +
# Reboot after this doing fdisk!
format d:
sys d:

## Example of how to "install" packages from Base group
# `-x SOURCE/*` will exclude files in source directories
# `-d sets the destination directory, where unzipped files go
for %f in (*.ZIP) do unzip %f -x SOURCE/* -d d:\FreeDOS

By performing those steps, you have a minimal bootable system. There will only be two files on the drive:

  • KERNEL.SYS - The FreeDOS kernel itself
  • COMMAND.COM - The command prompt and built-in commands. Akin to Bash or BusyBox. This provides the C:\> prompt.

If you boot up and get a prompt, excellent. Type ? to get a list of built-in commands and features. You should see features like history, tab completion, directory stacks (pushd/popd), last directory (cd -).

Example steps:

  • Boot into the Live mode from the install disk
  • Run fdisk and setup a partition
  • Run format d: to setup a file system on the partition created. Can include /s makes it bootable by copying system files (KERNEL.SYS and COMMAND.COM) or do the next step manually
  • Run sys d: to copy the boot sector to d drive and kernel.
  • At this point the system should be bootable and you will load into the typical C:\> prompt with only two files on the system. Type ? for list of builtin commands.
  • To install additional application, unzip programs from the PACKAGES directory.
    • The BASE package is everything needed to recreate basic DOS environment.
    • To see what is in a zip file, unzip -l like unzip -l
    • To install everything in a directory (omit -x if you do not want to exclude sources): cd \PACKAGES\BASE and for %f in (*.ZIP) do unzip %f -x SOURCE/* -d d:\FDOS or d:\FreeDOS in newer version.

Use installer

Recommended FULL install with source. The FULL install will give you the package manage `fdimples`.

Download ISO from:

- On physical machine - In virtual machine - in VirtualBox, use the regular CD, not the Legacy one, but before you press “Install to hard disk” press `Tab` to edit the entry and add the word `raw` to the end. E.g. `.linux /isolinux/memdisk initrd=/isolinux/fdboot.img raw` otherwise you will get `Invalid Opcode at 0FAE 1068` messages. Set CPU max to 40% or it might go wild at some points. - Formatting hard disk

  1. From within FreeDOS: `format C:` or `format C: /s` for bootable.
  2. or: `fdisk`
  3. If you re-install it won't wipe the existing data.

Dealing with JemmEx out of memory error

Edit C:\fdconfig.sys to choose different memory option in menu. Try setting the default menu item to the one that loads no drivers at all. For me, option 3, the HIMEM one worked.

Also refer to which recommends making the following modification to the JemmEx option:

# Change from this
# to this

Dealing with unable to read hard disk error

When you use fdisk to partition the drive, it will initially ask you if you want to use large disks and format with FAT32. If you choose YES, you might end up getting errors when it tries to read the disk later. To solve this, choose NO when it asks you if you want to use extended disks. This will only use FAT16, whicht will limit you to 2GB max disk sizes. However, you can create one primary DOS partition of 2GB and then create an extended partition with numerous 2GB logical partitions. This way you can have an E:\, F:\, G:\, H:\\, etc, each of 2GB.

You can create one primary DOS partition

How kernel boot works and fdconfig.sys

Add a custom launcher, menu option 5:

`MENU 5 - do nothing` (Won't load anything from autoexec) `5?SHELL=C:\FDOS\BIN\COMMAND.COM`

How to setup a single dedicated program to run: Put it in `AUTOEXEC.BAT` or in `COMMAND.COM` with `SHELL=C:\myapp.exe`

Explanation of files

Here are the files. That's it. That's the whole operating system.

  • AUTOEXEC.BAT - Put all your stuff here. Like your init scripts and bash profile in one. In 1.3rc5 this has been renamed to FDAUTO.BAT.
  • COMMAND.COM - The built-in shell, akin to BusyBox or Bash.
  • FDCONFIG.SYS - Boot configuration, menu configuration
  • KERNEL.SYS - The kernel binary itself. 48 KB!
  • FDOS\ - In newer versions like 1.3rc5, C:\FreeDOS instead.
  • FDOS\BIN\ - Executables

Getting help

You can always type ? to get a list of the built-in commands. This will be available even if you did the absolute minimal install with fdiskformatsys and you only have KERNEL.SYS and COMMAND.COM as the only two files on disk.


- ?, help

Adding ` /?`

dir /?

Built-in commands

Built-in commands that come with COMMAND.COM:

Enter: ? to see.

Built-in commands:

  • path - Display executable paths
  • echo - Print text to terminal
  • cls - Clear the screen
  • which - Find where an executable is located. E.g. which fdisk
  • vol - Disk volume information. E.g. vol d:
  • mkdir/rmdir, cd/chdir, del rename
  • for, rem, goto, break - For loops and comments (mostly for batch scripting)
  • pause - “Press any key to continue…” that will wait before continuing
  • ver - Print version of (FreeCom)
  • copy/del

There are also built-in features like:

  • Directory stack (pushd/popd/dirs)
  • Last directory (cd -)
  • History (history)
  • Tab completion
  • Aliases (alias)
  • Enhanced input

- `ver`, `vol`, `mem`, `cls`, `which`, `path` - `cd`, `dir`, `dir /w`, `tree`, `| more`, `mkdir`, `echo hi > test.txt`, `rmdir`, `deltree` - `type`, `edit`, `set`, `edit` - `fdconfig.sys` - Update PATH `PATH %PATH%;C:\MY\BIN`

- How to mount a floppy or CD-ROM? - How to check free disk space? (du?) - How to check what devices are connected (Is there a CD ROM?)


There is a built-in editor called `EDIT`. Another editor can be installed: Folding Editor `FED` from the FreeDOS CD using `fdimples`. Vim can be installed in 1.3!


Batch scripting

Even in the most minimal install, you have COMMAND.COM which is the shell that has built-in commands. This shell is scriptable, like Bash. The scripts are called Batch scripts and end with a .BAT extension.

REM Add comments with REM. It stands for REMARK
for %f in (*.ZIP) do unzip %f -x SOURCE/* -d d:\FreeDOS

REM Turn off echo with:
@echo off

REM Set environment variables with set

Mounting USB & CD drives

Get software

Using fdimples package manager

Insert the FreeDOS CD-ROM, then run `fdimples` to get the software repository screen. Use `TAB`, `SHIFT-TAB`, the arrow keys, `SPACE`, and `RETURN` to move around and select things. Then hit OK to install.

Recommended fdimples packages:

- Development/DJGPP (C/C+ compiler) - Development/FBC (BASIC compiler) - Development/Lua (Lua interpreter) - Editors/FED - Editors/VIM - Unix-like tools - Desktops - FDNET for networking

  1. curl, links, wget, rsync, sshdos, vncview

curl, links, htget, ping, rsync, sshdos, vncview, wget - DN2 (file navigator) - Dialog - sqlite - FDTUI (better than FDSHELL which runs at 100% cpu) - dosshell - terminal-based Windows system with mouse support - IMGEDIT imgview and imgedit like Paint - pmge pgm - a menu system for running programs

Installing manually in FreeDOS

Video on installing software without `fdimples`: Download other software from: Download the zip using `wget` or `curl` or `htget` or `links`.

List the files in a zip

``` unzip -l FILE.ZIP # unzip -j FILE.ZIP SPECIFIC\SUBDIR\*.* -d C:\DEST unzip -j FILE.ZIP PROGS\XYZ\*.* -d C:\XYZ ```

Updating fdimples packages

Update packages with the following command. It will require `FDNET` package installed to enable networking.

``` fdnpkg update ```

Many packages seem broken on the FreeDOS 1.2 CD, like Perl. But, after running `fdnpkg update` and then `fdimples` to uninstall and re-install Perl, it worked. Same with packages like curl (SSL seemed broken and wonky), and


Once you have `curl`, `wget` and ethtools, you can start fetching programs from internet. If you restart after installing the network tools, it will use DHCP to obtain an IP address. It will print your IP on startup.

<!– There is a browser called `lynx` and `links` too. (On website?) –> <!– SSH tool? –> - FDNET (base requirement to get networking working) - links - Text-based web browser - curl - Make network requests. Use `curl -k` for SSL since there are no CA certs on the system. - gopherus - I can't get SSH to work yet. FreeDOS 1.3 comes with SSH2.

### Web browsing

Text Browser: Links C:\Links\links.exe GUI Browser: Dillo C:\DILLO\DILLO.exe GUI Browser: Arachnae



  • Assembly: fasm, jwasm, nasm
  • BASIC: FBC (FreeBasic 32-bit compiler)
  • C: bcc (Bruce's C compiler), gcc (djgpp C/C++ compiler), ow Open Watcom C/C++ Compiler
  • Pascal: FPC
NASM hello world

Similar to the Linux hello world program except int 80h won't work because that's a Linux interrupt. In DOS its int 21

VGA programming

Screen 13! How to do it in assembly with interrupt, and how to do it in BASIC with SCREEN 13. Where is the VGA memory location. It's as easy as writing to the memory location.



Bytewater must be run with a 32-bit protected mode DOS extender like dos32a.

dos32a bwbasic.exe

= FreeBASIC =

Install `FreeBASIC` compiler from FreeDOS CD using `fdimples`. Then, use the compiler `C:\DEVEL\FBC\FBC.EXE`. Compile `.BAS` files to `.EXE` with it. There are examples in `C:\DEVEL\FBC\EXAMPLES\EXAMPLES.ZIP` and documention in `C:\DEVEL\FBC\`.



= OpenWatcom =

  • There is conio.h for terminal (like ncurses)
  • and graph.h for doing graphics
REM Without this env var, linker fails
set WATCOM=C:\devel\watcomc

REM wcc, wpp, wlink - compilers & linker
REM wcl - compile and link in one
wcl hello.cpp /IC:\devel\watcomc\h

REM TO allow the omission of /I flag set INCLUDE
set INCLUDE=C:\devel\watcomc\h

REM Now you can simply compile & link with:
wcl hello.cpp


Make sure DJGPP is installed from the FreeDOS CD-ROM using `fdimples`. Install DJGPP, DJGPP_BN (binutils) DJGPP_GC (gcc), and DJGPP_GP (g++), GJGPP_DB (gdb) and DJGPP_MK (make).


Use `djgpp` C:\devel\djgpp\

32-bit C/C++ toolchain

Console programming:

```c #include <stdio.h> int main() { print(“Hi\n”); } ```

```c #include <conio.h> #include <graph.h>

int main() {

_setvideomode(_TEXTC80); // Color text mode
_settextposition(10, 60);
return 0;

} ```

Graphics programming

VGA memory segment?

Drawing a rectangle:

```c /* */ #include <conio.h> #include <graph.h>

int main() {

int color;
for (color = 0; color < 16; color++) {
	_rectangle(_GBORDER, 5, 50, 20, 200); /* or _GFILLINTERIOR */

} ```

Emulators on FreeDOS

In 1.3 there are lots of emulators!!

Desktop on FreeDOS

In 1.3, there are 3 desktops you can install: OpenGEM, OzoneGUI, Seal

OpenGEM is another desktop C:\FDOS\OpenGem\gem.bat

Install `OZONEGUI` under `fdimples` → Utilities. Then run: `cd C:\OZONEGUI; main`. Go to the Control Panel and modify the display settings to higher resolution and color depth. <!– How to modify the settings in terminal if you mess up the resolution? –>

How to get into a GUI desktop to run apps like `DILLO` and `BWBASIC` ? Using oZone:

## Other

- How to dual boot on a physical machine with Linux - Can I use pthreads? - How to get sound/audio players working? How to play a .WAV - How to mount a network drive (looks like there are ntfs/nfs packages) - Can I compile with curses?

- Can I get vifm to compile? PDCurses? - Cookbook stuff!

  1. DOS
    1. Setup, Batch scripts, CLI basics
  2. Perl 5 stuff

- Can I compile Python or Ruby or Node.JS? - Mirror their whole program library - Java on DOS? Cross-compiling stuff for DOS binaries in 16-bit 8086 format. DosBox web interface like interne archive


operating_systems/freedos.txt · Last modified: 2022/03/21 23:53 by nanodano