{"id":14051,"date":"2026-05-18T03:00:00","date_gmt":"2026-05-18T07:00:00","guid":{"rendered":"https:\/\/www.both.org\/?p=14051"},"modified":"2026-04-15T14:08:25","modified_gmt":"2026-04-15T18:08:25","slug":"customize-your-freedos-with-fdconfig-sys","status":"publish","type":"post","link":"https:\/\/www.both.org\/?p=14051","title":{"rendered":"Customize your FreeDOS with FDCONFIG.SYS"},"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=\"14051\" 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\">    <\/span>\r\n<\/div><\/div>\n<p>The main configuration file for FreeDOS is a file in the root directory called <code>FDCONFIG.SYS<\/code>. This file contains a series of lines, each setting a value such as <code>LASTDRIVE=Z<\/code> or <code>FILES=40<\/code>. For example, the default <code>FDCONFIG.SYS<\/code> in FreeDOS 1.4 looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SET DOSDIR=C:\\FreeDOS\n\n!COUNTRY=001,858,C:\\FreeDOS\\BIN\\COUNTRY.SYS\n!LASTDRIVE=Z\n!BUFFERS=20\n!FILES=40\n!MENUCOLOR=7,0\n\nMENUDEFAULT=2,5\nMENU 1 - Load FreeDOS with JEMMEX, no EMS (most UMBs), max RAM free\nMENU 2 - Load FreeDOS with JEMMEX (more compatible)\nMENU 3 - Load FreeDOS with JEMM386 (Expanded Memory)\nMENU 4 - Load FreeDOS low with some drivers (Safe Mode)\nMENU 5 - Load FreeDOS without drivers (Emergency Mode)\n\n123?DOS=HIGH\n123?DOS=UMB\n123?DOSDATA=UMB\n\n1?DEVICE=C:\\FreeDOS\\BIN\\JEMMEX.EXE NOEMS X=TEST I=TEST NOVME NOINVLPG\n2?DEVICE=C:\\FreeDOS\\BIN\\JEMMEX.EXE NOEMS X=TEST NOVME NOINVLPG\n34?DEVICE=C:\\FreeDOS\\BIN\\HIMEMX.EXE\n3?DEVICE=C:\\FreeDOS\\BIN\\JEMM386.EXE X=TEST NOVME NOINVLPG\n\nREM 123?DEVICEHIGH=C:\\FreeDOS\\BIN\\LOGGER.COM COLOR 256 XMS MONO 128 XMS\n\n12?SHELLHIGH=C:\\FreeDOS\\BIN\\COMMAND.COM C:\\FreeDOS\\BIN \/E:1024 \/P=C:\\FDAUTO.BAT\n345?SHELL=C:\\FreeDOS\\BIN\\COMMAND.COM C:\\FreeDOS\\BIN \/E:1024 \/P=C:\\FDAUTO.BAT<\/code><\/pre>\n\n\n\n<p>But what do all those lines mean? Why do some have a question mark (<code>?<\/code>) or an exclamation point (<code>!<\/code>), while other lines do not?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"a-simple-configuration\">A simple configuration<\/h2>\n\n\n\n<p>Let&#8217;s start with a simple configuration, so we can see what does what. Assume this very brief <code>FDCONFIG.SYS<\/code> file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LASTDRIVE=Z\nBUFFERS=20\nFILES=40\nDEVICE=C:\\FDOS\\BIN\\HIMEMX.EXE\nSHELL=C:\\FDOS\\BIN\\COMMAND.COM C:\\FDOS\\BIN \/E:1024 \/P=C:\\FDAUTO.BAT<\/code><\/pre>\n\n\n\n<p>This configuration file contains only a few instructions:<\/p>\n\n\n\n<p>The first instruction tells FreeDOS how many drive letters to reserve in memory. (DOS uses letters to represent each drive attached to the system, and <code>LASTDRIVE=Z<\/code> says to reserve drive letters from &#8220;A&#8221; to &#8220;Z.&#8221;). <code>LASTDRIVE<\/code> affects the number of logical drives that your system can recognize. You probably don&#8217;t have any logical drives; the FreeDOS installer doesn&#8217;t set these up by default. In any case, it is safe to set <code>LASTDRIVE=Z<\/code> on any FreeDOS system.<\/p>\n\n\n\n<p>The <code>BUFFERS<\/code> line reserves memory for file buffers. A buffer helps to speed up certain processes that require storage, such as copying files. If you set a larger value for <code>BUFFERS<\/code>, FreeDOS will reserve more memory\u2014and vice versa for smaller values. Most users will set this to <code>BUFFERS=20<\/code> or <code>BUFFERS=40<\/code>, depending on how often they need to read and write files on the system.<\/p>\n\n\n\n<p>The <code>FILES<\/code> setting determines how many files DOS allows you to open at one time. If you run an application that needs to open many files at once, such as a Genealogy database, you may need to set <code>FILES<\/code> to a larger value. For most users, <code>FILES=40<\/code> is a reasonable value.<\/p>\n\n\n\n<p><code>DEVICE<\/code> is a special instruction that loads a device driver. DOS requires device drivers for certain hardware or configurations. The line in the example loads the HimemX device driver, so DOS can take advantage of expanded memory beyond the first 640 kilobytes.<\/p>\n\n\n\n<p>The last line tells the FreeDOS kernel where to find the command-line shell. By default, the kernel will look for the shell as <code>COMMAND.COM<\/code>, but you can change it with the SHELL instruction. In this example, the shell is the <code>COMMAND.COM<\/code> program, located in the <code>\\FDOS\\BIN<\/code> directory on the &#8220;C:&#8221; drive.<\/p>\n\n\n\n<p>The other text at the end of the SHELL indicate the options to the <code>COMMAND.COM<\/code> shell. The FreeDOS <code>COMMAND.COM<\/code> supports several startup options to modify its behavior, including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>C:\\FDOS\\BIN<\/code> &#8211; The full path to the <code>COMMAND.COM<\/code> program<\/li>\n\n\n\n<li><code>\/E:1024<\/code> &#8211; The environment size, in bytes. <code>\/E:1024<\/code> tells <code>COMMAND.COM<\/code> to reserve 1024 bytes, or 1 kilobyte, to store its environment variables.<\/li>\n\n\n\n<li><code>\/P=C:\\FDAUTO.BAT<\/code> &#8211; The <code>\/P<\/code> option indicates that the shell is a permanent shell, so the user cannot quit the shell by typing <code>EXIT<\/code> (the extra text tells <code>COMMAND.COM<\/code> to execute the <code>C:\\FDAUTO.BAT<\/code> file at startup, instead of the default <code>AUTOEXEC.BAT<\/code> file)<\/li>\n<\/ul>\n\n\n\n<p>With that simple configuration, you should be able to interpret some of the FDCONFIG.SYS file that&#8217;s installed by FreeDOS.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"boot-menu\">Boot menu<\/h2>\n\n\n\n<p>FreeDOS supports a neat feature\u2014multiple configurations on one system, using a &#8220;boot menu&#8221; to select the configuration you want. The <code>FDCONFIG.SYS<\/code> file contains several lines that define the menu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MENUDEFAULT=2,5\nMENU 1 - Load FreeDOS with JEMMEX, no EMS (most UMBs), max RAM free\nMENU 2 - Load FreeDOS with JEMMEX (more compatible)\nMENU 3 - Load FreeDOS with JEMM386 (Expanded Memory)\nMENU 4 - Load FreeDOS low with some drivers (Safe Mode)\nMENU 5 - Load FreeDOS without drivers (Emergency Mode)<\/code><\/pre>\n\n\n\n<p>The <code>MENUCOLOR<\/code> instruction defines the text color and background color of the boot menu. These values are typically in the range 0 to 7, and represent these colors:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>0 Black<\/li>\n\n\n\n<li>1 Blue<\/li>\n\n\n\n<li>2 Green<\/li>\n\n\n\n<li>3 Cyan<\/li>\n\n\n\n<li>4 Red<\/li>\n\n\n\n<li>5 Magenta<\/li>\n\n\n\n<li>6 Brown<\/li>\n\n\n\n<li>7 White<\/li>\n<\/ul>\n\n\n\n<p>So the <code>MENUCOLOR=7,0<\/code> definition means to display the menu with white (7) text on a black (0) background. If you instead wanted to use white text on a blue background, you could define this as <code>MENUCOLOR=7,1<\/code>.<\/p>\n\n\n\n<p>The exclamation point at the start of the line means that this instruction will always be executed, no matter what menu option you choose.<\/p>\n\n\n\n<p>The <code>MENUDEFAULT=1,5<\/code> line tells the kernel how long to wait for the user to select a boot menu entry, or what default menu entry to use if the user did not select one. <code>MENUDEFAULT=1,5<\/code> indicates the system will wait for 5 seconds; if the user did not attempt to select a menu item within that time, the kernel will assume boot menu &#8220;1&#8221; instead.<\/p>\n\n\n\n<p>The <code>MENU<\/code> lines after that are labels for the different boot menu configurations. These are presented in order, so menu item &#8220;1&#8221; is first, then &#8220;2,&#8221; and so on.<\/p>\n\n\n\n<p>In the lines that follow in <code>FDCONFIG.SYS<\/code>, you will see numbers before a question mark. These indicate &#8220;for this boot menu entry, use this line.&#8221; For example, the line with <code>234?<\/code> will only load the HimemX device driver if the user selects boot menu entries &#8220;2,&#8221; &#8220;3,&#8221; or &#8220;4.&#8221;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"other-configuration\">Other configuration<\/h2>\n\n\n\n<p>There are lots of ways to use <code>FDCONFIG.SYS<\/code> to configure your FreeDOS system. We&#8217;ve only covered the basics here, the most common ways to define your FreeDOS kernel settings. For more information, explore the FreeDOS Help system (type <code>HELP<\/code> at the command line) to learn how to use all of the FreeDOS <code>FDCONFIG.SYS<\/code> options:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>SWITCHES<\/code> &#8211; Boot time processing behavior<\/li>\n\n\n\n<li><code>REM<\/code> and <code>;<\/code> &#8211; Comments (ignored)<\/li>\n\n\n\n<li><code>MENUCOLOR<\/code> &#8211; Boot menu text color and background color<\/li>\n\n\n\n<li><code>MENUDEFAULT<\/code> &#8211; Boot menu default value<\/li>\n\n\n\n<li><code>MENU<\/code> &#8211; Boot menu entry<\/li>\n\n\n\n<li><code>ECHO<\/code> and <code>EECHO<\/code> &#8211; Display messages<\/li>\n\n\n\n<li><code>BREAK<\/code> &#8211; Sets extended Ctrl+C checking on or off<\/li>\n\n\n\n<li><code>BUFFERS<\/code> or <code>BUFFERSHIGH<\/code> &#8211; How many disk buffers to allocate<\/li>\n\n\n\n<li><code>COUNTRY<\/code> &#8211; Sets international behavior<\/li>\n\n\n\n<li><code>DOS<\/code> &#8211; Tell the FreeDOS kernel how to load itself into memory<\/li>\n\n\n\n<li><code>DOSDATA<\/code> &#8211; Tell FreeDOS to load kernel data into upper memory<\/li>\n\n\n\n<li><code>FCBS<\/code> &#8211; Set the number of file control blocks<\/li>\n\n\n\n<li><code>KEYBUF<\/code> &#8211; Reassign the keyboard buffer in memory<\/li>\n\n\n\n<li><code>FILES<\/code> or <code>FILESHIGH<\/code> &#8211; How many files to have open at once<\/li>\n\n\n\n<li><code>LASTDRIVE<\/code> or <code>LASTDRIVEHIGH<\/code> &#8211; Set the last drive letter that can be used<\/li>\n\n\n\n<li><code>NUMLOCK<\/code> &#8211; Set the keyboard number pad lock on or off<\/li>\n\n\n\n<li><code>SHELL<\/code>, <code>SHELLHIGH<\/code>, or <code>COMMAND<\/code> &#8211; Set the command line shell<\/li>\n\n\n\n<li><code>STACKS<\/code> or <code>STACKSHIGH<\/code> &#8211; Add stacks to handle hardware interrupts<\/li>\n\n\n\n<li><code>SWITCHAR<\/code> &#8211; Redefines the command line option switch character<\/li>\n\n\n\n<li><code>SCREEN<\/code> &#8211; Set the number of lines on the screen<\/li>\n\n\n\n<li><code>VERSION<\/code> &#8211; Set what DOS version to report to programs<\/li>\n\n\n\n<li><code>IDLEHALT<\/code> &#8211; Activates energy saving features, useful on certain systems<\/li>\n\n\n\n<li><code>DEVICE<\/code> and <code>DEVICEHIGH<\/code> &#8211; Load a driver into memory<\/li>\n\n\n\n<li><code>INSTALL<\/code> and <code>INSTALLHIGH<\/code> &#8211; Load a &#8220;terminate and stay resident&#8221; program<\/li>\n\n\n\n<li><code>SET<\/code> &#8211; Set a DOS environment variable<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"configuring-in-plain-text\">Configuring in plain text<\/h2>\n\n\n\n<p>Like Linux and other Unix systems, FreeDOS configuration happens in plain text. No special tools for editing are required, so dive in and see what options suit you best.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><em>Adapted from <a href=\"https:\/\/opensource.com\/article\/21\/6\/freedos-fdconfigsys\">Configure FreeDOS in plain text<\/a> by Jim Hall<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to configure FreeDOS with FDCONFIG.SYS<\/p>\n","protected":false},"author":33,"featured_media":2970,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[100,340],"tags":[104,267],"class_list":["post-14051","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-command-line","category-freedos","tag-command-line","tag-freedos"],"modified_by":"Jim Hall","_links":{"self":[{"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/14051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14051"}],"version-history":[{"count":3,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/14051\/revisions"}],"predecessor-version":[{"id":14059,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/14051\/revisions\/14059"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/media\/2970"}],"wp:attachment":[{"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}