DevDungeon
- Labs
Knowledge
Social
DevDungeon
Knowledge
Social
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? https://arstechnica.com/information-technology/2014/07/it-may-be-barely-an-operating-system-but-dos-still-matters-to-some-people/ - 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 (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)
Video on installing manually: https://www.youtube.com/watch?v=krbYBZr2ISw
Steps:
fdisk
format
sys
# Partition the disk, create file system, make bootable # and install the kernel.sys + command.com fdisk # Reboot after this doing fdisk! format d: sys d: ## Example of how to "install" packages from Base group C: cd \PACKAGES\BASE # `-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 itselfCOMMAND.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:
fdisk
and setup a partitionformat 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 manuallysys d:
to copy the boot sector to d drive and kernel.C:\>
prompt with only two files on the system. Type ?
for list of builtin commands.PACKAGES
directory.BASE
package is everything needed to recreate basic DOS environment.unzip -l
like unzip -l tree.zip
cd \PACKAGES\BASE
and for %f in (*.ZIP) do unzip %f -x SOURCE/* -d d:\FDOS
or d:\FreeDOS
in newer version.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
https://www.youtube.com/watch?v=Q72PYNwHrHw
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 http://wiki.freedos.org/wiki/index.php/VirtualBox_-_Bugs:_JEMMEX which recommends making the following modification to the JemmEx option:
# Change from this 1?DEVICE=C:\FDOS\BIN\JEMMEX.EXE NOEMS X=TEST I=TEST NOVME NOINVLPG # to this 1?DEVICE=C:\FDOS\BIN\JEMMEX.EXE NOEMS X=TEST I=B000-B7FF I=C800-EFFF NOVME NOINVLPG
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
https://www.youtube.com/watch?v=KQvJGoc-KfU
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: https://www.youtube.com/watch?v=Nn8_9ABgrb4 Put it in `AUTOEXEC.BAT` or in `COMMAND.COM` with `SHELL=C:\myapp.exe`
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 configurationKERNEL.SYS
- The kernel binary itself. 48 KB!FDOS\
- In newer versions like 1.3rc5, C:\FreeDOS
instead.FDOS\BIN\
- Executables
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 fdisk
→ format
→ sys
and you only have KERNEL.SYS
and COMMAND.COM
as the only two files on disk.
?
- ?
, help
Adding ` /?`
dir /?
Built-in commands that come with COMMAND.COM
:
Enter: ?
to see.
Built-in commands:
path
- Display executable pathsecho
- Print text to terminalcls
- Clear the screenwhich
- 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 continuingver
- Print version of Command.com (FreeCom)copy
/del
There are also built-in features like:
pushd
/popd
/dirs
)cd -
)history
)alias
)- `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!
EDIT C:\FED\FED.EXE C:\VIM\VIM.EXE
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 set
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
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
Video on installing software without `fdimples`: https://www.youtube.com/watch?v=WBgGUndr8I0 Download other software from: https://www.freedos.org/software/ 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 ```
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
C:\DEVEL\LUA\LUA.EXE
fasm
, jwasm
, nasm
FBC
(FreeBasic 32-bit compiler)bcc
(Bruce's C compiler), gcc
(djgpp C/C++ compiler), ow
Open Watcom C/C++ CompilerFPC
Similar to the Linux hello world program except int 80h
won't work because that's a Linux interrupt. In DOS its int 21
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.
= BWBASIC =
Bytewater must be run with a 32-bit protected mode DOS extender like dos32a
.
dos32a bwbasic.exe
= FreeBASIC =
https://www.youtube.com/watch?v=tIGokkohQho https://www.youtube.com/watch?v=OyPUn74nj-s
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\`.
``` cd C:\DEVEL\FBC\EXAMPLES unzip EXAMPLES.ZIP ..\FBC.EXE HELLO.BAS HELLO.EXE ```
= OpenWatcom =
conio.h
for terminal (like ncurses)graph.h
for doing graphicsREM 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
= DJGPP =
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).
<!– ``` SET DJGPP=C:\DEVEL\DJGPP\DJGPP.ENV PATH %PATH%;C:\DEVEL\DJGPP\BIN ``` –>
http://www.freedos.org/books/cprogramming/ http://www.freedos.org/ebook/cprogramming/part1/
Use `djgpp` C:\devel\djgpp\
32-bit C/C++ toolchain http://www.delorie.com/djgpp/
Console programming: http://www.freedos.org/ebook/cprogramming/part8/
```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); _outtext("hi"); getch(); _setvideomode(_DEFAULTMODE); return 0;
} ```
VGA memory segment?
Drawing a rectangle:
```c /* https://www.youtube.com/watch?v=t63FVSEnycE */ #include <conio.h> #include <graph.h>
int main() {
/* _VRES16COLOR, _SVRES16COLOR, _SVRES256COLOR, _XRES16COLOR, _XRES256COLOR */ _setvideomode(_VRES16COLOR);
int color; for (color = 0; color < 16; color++) { _setcolor(color); _rectangle(_GBORDER, 5, 50, 20, 200); /* or _GFILLINTERIOR */ }
} ```
In 1.3 there are lots of emulators!!
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: https://www.youtube.com/watch?v=nw-Fx5k7Smg
## Other
- How to dual boot on a physical machine with Linux - Can I use pthreads? https://www.freebasic.net/forum/viewtopic.php?t=21274 - 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!
- 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. https://nullprogram.com/blog/2014/12/09/ https://hackaday.com/2018/05/14/msdos-development-with-gcc/ DosBox web interface like interne archive
https://www.dosbox.com http://freedos.org https://www.freedos.org/books/ https://www.freedos.org/software/ https://archive.org/details/vintagesoftware https://archive.org/details/softwarelibrary_msdos https://en.wikipedia.org/wiki/FreeDOS
https://www.youtube.com/watch?v=OGeLIWAkncQ https://www.youtube.com/channel/UCaVARpkQdq5PmTM6-j6Pi8g https://www.freedos.org/c