{"id":13889,"date":"2026-03-26T09:58:27","date_gmt":"2026-03-26T13:58:27","guid":{"rendered":"https:\/\/www.both.org\/?p=13889"},"modified":"2026-03-26T09:58:27","modified_gmt":"2026-03-26T13:58:27","slug":"use-freedos-to-learn-about-computers","status":"publish","type":"post","link":"http:\/\/www.both.org\/?p=13889","title":{"rendered":"Use FreeDOS to learn about computers"},"content":{"rendered":"<div class=\"pld-like-dislike-wrap pld-template-1\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"\" data-post-id=\"13889\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                        <i class=\"fas fa-thumbs-up\"><\/i>\r\n                <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">2    <\/span>\r\n<\/div><\/div>\n<p>When I got my start in <em>working with computers<\/em>, &#8220;computers&#8221; were a very simple thing. The &#8220;personal computer&#8221; was still quite new: the Commodore PET, TRS-80, and Apple II had just come out in 1977. The IBM PC 5150 and DOS came out a few years later in 1981. My first computer was an Apple II clone, then the IBM PC. So my start with &#8220;computers&#8221; was loading a floppy into a drive and turning it on.<\/p>\n\n\n\n<p>These days, &#8220;computers&#8221; are much more complicated. And because of that extra complexity, it&#8217;s more difficult to see what&#8217;s happening <em>behind the scenes<\/em> for basic activities like booting the computer. I think it&#8217;s easier to go back to a simpler system, learn how that works, and use that <em>as a starting point<\/em> to learn how more modern computers do their thing.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"dos-boot-up\">DOS boot-up<\/h2>\n\n\n\n<p>Let&#8217;s look at how the FreeDOS kernel boots up on a computer. There&#8217;s a bit more detail happening here, but I&#8217;ll stick to the high points so we can focus on the major steps:<\/p>\n\n\n\n<p>First, the computer goes through a <strong>power-on self test<\/strong>, called a POST and it&#8217;s done through <em>firmware<\/em>. The POST tests the memory and checks if certain peripherals are attached to it. On some classic computers, you might see the computer &#8220;count up&#8221; the memory and display it on the screen\u2014that&#8217;s the POST reporting the memory.<\/p>\n\n\n\n<p>Then, the firmware needs to &#8220;hand off&#8221; the computer start-up process to the operating system. It can&#8217;t immediately jump to the operating system, because you can run lots of things on a PC. So instead, it looks for <em>the next step<\/em> in the process.<\/p>\n\n\n\n<p>The POST checks for a small executable program called the <em>master boot record<\/em>, usually on the hard disk. The master boot record (called the MBR) is what actually loads the operating system. In the 1990s, you might have more than one operating system running on your computer, and a way to select which operating system to boot was done through a little menu when the computer started up. That menu program was stored in the master boot record.<\/p>\n\n\n\n<p>The MBR has enough intelligence to figure out how to find the <em>operating system<\/em> for the computer. The MBR that loads FreeDOS knows to look for the <code>KERNEL.SYS<\/code> file, which <em>is the FreeDOS kernel<\/em>, and runs that.<\/p>\n\n\n\n<p>The FreeDOS kernel has certain defaults built into it, so it can boot on its own from there. But users can customize those values and add other actions such as loading system drivers (usually a CD-ROM driver) by writing a configuration file called <code>CONFIG.SYS<\/code> in the <em>root<\/em> directory of the boot drive.<\/p>\n\n\n\n<p>The FreeDOS kernel actually first looks for a file called <code>FDCONFIG.SYS<\/code> and if it&#8217;s not there, then it looks for <code>CONFIG.SYS<\/code>. The MS-DOS kernel only looks for <code>CONFIG.SYS<\/code>. We do it that way with the FreeDOS kernel so you can boot <em>both<\/em> MS-DOS and FreeDOS on the same hard drive: use <code>CONFIG.SYS<\/code> for your MS-DOS settings, and <code>FDCONFIG.SYS<\/code> for your FreeDOS configuration.<\/p>\n\n\n\n<p>After the kernel starts up, it needs to let the user do things with the operating system. To do this, the kernel needs to load a <em>shell<\/em> program. By default, DOS systems like FreeDOS and MS-DOS use a program called <code>COMMAND.COM<\/code>, also in the root directory of the boot drive. But you can instead specify another shell program with the <code>SHELL=<\/code> line in your <code>CONFIG.SYS<\/code> or <code>FDCONFIG.SYS<\/code> file.<\/p>\n\n\n\n<p>It can be helpful to have the shell start up with certain settings and run any programs that set up the system, such as setting a <code>PATH<\/code> variable to tell the shell where to look for other programs. You could type these commands in yourself, but it&#8217;s easier if the system can do that by itself. So at start-up, the shell reads a file called <code>AUTOEXEC.BAT<\/code> that contains a bunch of commands.<\/p>\n\n\n\n<p>A neat feature in the FreeDOS <code>COMMAND.COM<\/code> is that you can tell it to look for a different file, using the <code>SHELL=<\/code> line in the <code>CONFIG.SYS<\/code> file. This makes it possible to use a different start-up file for FreeDOS than MS-DOS. For example, for the last several releases, we&#8217;ve used <code>FDAUTO.BAT<\/code> as the shell&#8217;s start-up file; you can see that setting in the <code>CONFIG.SYS<\/code> file. That way, MS-DOS only looks for <code>AUTOEXEC.BAT<\/code> but FreeDOS uses <code>FDAUTO.BAT<\/code> instead.<\/p>\n\n\n\n<p>And that&#8217;s it! After the shell reads its start-up file, you will see the friendly <code>&gt;<\/code> prompt, usually with a path like <code>C:\\&gt;<\/code>, so you can start typing commands.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"start-simple-go-from-there\">Start simple, go from there<\/h2>\n\n\n\n<p>I like to use DOS as an example when teaching others about how computers work, because DOS is small enough and simple enough that you can see all of the &#8220;moving parts&#8221; and understand what they do. And once you understand how DOS works, you can start to understand more complex systems.<\/p>\n\n\n\n<p>For example, Linux systems have more steps during the boot-up process, but essentially they follow the same <em>general process<\/em>: the computer powers on, it runs a firmware program (these days, that&#8217;s UEFI) that loads the next part of the operating system. The Linux kernel starts up, and loads a bunch of drivers (as kernel modules) and other things.<\/p>\n\n\n\n<p>Linux is a multi-user system that has a <em>lot<\/em> of other things going on, so it&#8217;s hard to see the details if you don&#8217;t know what you&#8217;re seeing\u2014but early in the start-up process, Linux runs a program that loads everything else. In earlier times, this program was called <code>init<\/code> and it used scripts to start any background processes (called daemons). Most modern Linux distributions instead use SystemD, which does things differently than <code>init<\/code>, but it still does the job of loading other programs.<\/p>\n\n\n\n<p>Eventually, your Linux system boots to a login prompt. After typing your username and password, you get some kind of user interface. This is usually a graphical desktop like GNOME or KDE or Xfce, or another one. If you&#8217;re on a server, that&#8217;s probably just a command line prompt. For a command line prompt, you&#8217;re in a <em>shell<\/em>, and you can control what commands set up your <em>initial environment<\/em> by writing a file. If you use the Bash shell, that file is <code>.bash_profile<\/code> in your home directory. For non-login shells, the start-up file is called <code>.bashrc<\/code>.<\/p>\n\n\n\n<p>So the process is more complicated with Linux, because there&#8217;s a lot more going on. But the <em>basic steps<\/em> are still there. And if you understand how a simple system like DOS starts up, you can understand more complex systems like Linux.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Start by learning a simple system and work your way up from there.<\/p>\n","protected":false},"author":33,"featured_media":3514,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[340,5],"tags":[267,91],"class_list":["post-13889","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-freedos","category-linux","tag-freedos","tag-linux"],"modified_by":"Jim Hall","_links":{"self":[{"href":"http:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/13889","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"http:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13889"}],"version-history":[{"count":1,"href":"http:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/13889\/revisions"}],"predecessor-version":[{"id":13890,"href":"http:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/13889\/revisions\/13890"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/media\/3514"}],"wp:attachment":[{"href":"http:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13889"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}