How to Build a Safe FreeDOS Multi-Configuration Boot Menu
Build a safe FreeDOS multiboot menu with FDCONFIG.SYS sections and matching FDAUTO.BAT branches for gaming, networking, diagnostics, and recovery.
Back up FDCONFIG.SYS and FDAUTO.BAT before editing either one — a multi-configuration boot menu is genuinely useful, but it’s also the kind of change that can leave a machine unable to boot cleanly if a syntax error slips through untested.
Step 1: understand the actual menu mechanism
FreeDOS’s MENU directive in FDCONFIG.SYS displays a numbered boot menu during startup; MENUDEFAULT sets which option is selected automatically if no key is pressed within a given timeout, and MENUCOLOR controls its text and background colors. The mechanism for making later CONFIG.SYS lines conditional on which menu option was chosen is a numeric prefix directly on the line itself:
[menu]
menuitem=1,Normal
menuitem=2,Games
menuitem=3,Recovery
menudefault=1,10
12?DOS=HIGH
2?DEVICE=C:\FDOS\BIN\HIMEMX.EXE
23?DEVICEHIGH=C:\FDOS\BIN\ANSI.SYS
A line prefixed 12? runs only if option 1 or 2 was selected; 23? runs for options 2 or 3. This is what actually lets one FDCONFIG.SYS serve several genuinely different boot profiles instead of needing entirely separate configuration files.
Step 2: put only universally safe directives in the common section
Anything every profile needs regardless of which one is selected — core FreeDOS kernel options, filesystem drivers, basics that no profile should ever boot without — belongs unconditionally, with no numeric prefix. Reserve the prefixed, conditional lines specifically for memory managers, optional device drivers, and anything else that’s genuinely profile-specific, so the common section stays small and easy to reason about.
Step 3: make FDAUTO.BAT branch on the same selection
FreeDOS sets an environment variable reflecting which menu option was chosen, which your startup batch file can check directly:
IF "%CONFIG%"=="2" GOTO :games
IF "%CONFIG%"=="3" GOTO :recovery
GOTO :normal
This is what keeps a CD-ROM redirector or network packet driver from being loaded in AUTOEXEC-equivalent startup when its kernel-side prerequisite from FDCONFIG.SYS wasn’t actually selected for that boot — loading a driver whose dependency never initialized is a common, avoidable source of a startup batch file hanging or erroring partway through.
Step 4: build the recovery entry to be genuinely minimal
The recovery profile should load no optional drivers, no memory managers beyond what’s strictly required, and no TSRs at all — its entire purpose is providing a config nearly guaranteed to boot even when something else in the primary profile has gone wrong. Give it a short menu timeout default only for the normal-use profile, not recovery, so an unattended reboot doesn’t default into a barebones environment when everything is actually fine.
Step 5: test every entry from a genuine cold boot
Test each menu option by actually power-cycling or cold-booting the machine and selecting it, not merely by restarting the FreeCOM shell from within an already-running session — a cold boot exercises the full driver-loading sequence in a way a shell restart doesn’t. Record free conventional memory and confirm expected devices are present for each profile, so a regression in one specific configuration doesn’t go unnoticed just because the profiles you test most often still work.
Step 6: keep an external rescue path independent of this file entirely
However carefully tested, a multi-configuration FDCONFIG.SYS is still a single file a future edit could break. Keep bootable external rescue media — a floppy or USB image with its own minimal, independent configuration — so a syntax error introduced in some future edit to the hard disk’s own configuration is never the only way back into a working system.
How this compares to MS-DOS’s own original MultiConfig
MS-DOS 6.0 introduced conceptually the same idea — combining several CONFIG.SYS/AUTOEXEC.BAT pairs into one file with a boot-time menu — but implemented it with named bracketed block headers like [MENU], [COMMON], and [CONFIG1] rather than FreeDOS’s inline numeric prefixes. Both approaches solve the identical real-world problems Microsoft’s own documentation described at the time: a dual-boot machine needing different driver sets, or a system needing to switch between conventional-memory-maximized and expanded-memory-available configurations depending on what’s about to run. If you’re translating an old MS-DOS MultiConfig setup to FreeDOS, expect to restructure the actual mechanism, not just copy the file across — the underlying goal transfers directly, but the syntax does not.
Naming menu entries so future-you understands them instantly
Give each menuitem a genuinely descriptive label rather than a generic “Config 1” placeholder — a menu read once at a cold boot, months after you set it up, benefits enormously from names that state their actual purpose plainly. “Recovery — no drivers” tells you immediately what you’re choosing and why it exists; a bare number forces you to remember, or go re-read FDCONFIG.SYS itself, before making a confident choice under exactly the stressful circumstances a recovery boot usually implies.
Related:
- The FreeDOS Boot Process: CONFIG.SYS and AUTOEXEC.BAT
- Recovering a FreeDOS System That Won’t Boot After a Bad CONFIG.SYS Edit
Sources: