{{tag>DOS}} ====== FreeDOS ====== 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 ===== 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) ===== Installing ===== ==== Minimal manual installation ==== Video on installing manually: [[https://www.youtube.com/watch?v=krbYBZr2ISw]] Steps: - Partition the disk with ''fdisk'' - Create a file system on the partition with ''format'' - Make the disk bootable and copy kernel with ''sys'' - Optionally, install any desired packages by unzipping and copying them over # 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 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 tree.zip'' * 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 - From within FreeDOS: `format C:` or `format C: /s` for bootable. - or: `fdisk` - If you re-install it won't wipe the existing data. - http://wiki.freedos.org/wiki/index.php/Format - ==== Dealing with JemmEx out of memory error ==== [[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 ==== 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 ===== 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` ===== 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 ''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 ===== 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 Command.com (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?) ===== Editors ===== 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 ===== 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 set ===== Mounting USB & CD drives ===== ===== Get software ===== * [[https://www.freedos.org/links/]] * [[https://www.freedos.org/software/]] * [[https://www.dosbox.com]] * [[https://archive.org/details/softwarelibrary_msdos]] * [[http://dosprograms.info.tt/]] ==== 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 - 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`: 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 ``` ==== 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 ===== Networking ===== 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. - 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 ===== Programming ===== === Languages === * Lua: ''C:\DEVEL\LUA\LUA.EXE'' * 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. == Lua == == Perl == == BASIC == = 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 ``` == C/C++ == = 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 = 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). 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 int main() { print("Hi\n"); } ``` ```c #include #include int main() { _setvideomode(_TEXTC80); // Color text mode _settextposition(10, 60); _outtext("hi"); getch(); _setvideomode(_DEFAULTMODE); return 0; } ``` == Graphics programming == VGA memory segment? Drawing a rectangle: ```c /* https://www.youtube.com/watch?v=t63FVSEnycE */ #include #include 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 */ } } ``` https://www.youtube.com/watch?v=oCrqiVQ7jdo ===== 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 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! - DOS - Setup, Batch scripts, CLI basics - 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. https://nullprogram.com/blog/2014/12/09/ https://hackaday.com/2018/05/14/msdos-development-with-gcc/ DosBox web interface like interne archive ===== References ===== 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