How to Create a Boot Menu in Windows 95 CONFIG.SYS
Although Windows 95 introduced a largely automated graphical boot
sequence, it preserved the multi-configuration features originally
introduced in MS-DOS 6.0. Users leveraged the CONFIG.SYS
text file to construct custom startup menus, allowing them to choose
between loading the complete Windows GUI, launching into pure real-mode
DOS, or applying custom driver configurations for DOS gaming. This
article explains how to build a custom CONFIG.SYS menu,
manage driver blocks, and branch execution in
AUTOEXEC.BAT.
The [menu] Block
Architecture
At the core of the configuration is the [menu] block.
When placed at the top of CONFIG.SYS, it signals MS-DOS 7.0
(the underlying DOS version in Windows 95) to pause bootup and render a
text-based selection screen.
The menu definition relies on several key directives:
menuitem: Defines a selectable option. The syntax ismenuitem=block_name, Display Label.menudefault: Sets the fallback option and an optional timer:menudefault=block_name, seconds.menucolor: Configures the text and background color of the menu screen:menucolor=foreground, background.
An example menu block looks like this:
[menu]
menuitem=Win, Start Windows 95
menuitem=DOSGames, Boot to Pure DOS with CD/Mouse
menuitem=CleanDOS, Safe DOS (No Extra Drivers)
menudefault=Win, 5
menucolor=15, 1Defining Configuration Blocks
Following the [menu] section, users defined dedicated
blocks matching the names assigned in the menuitem
statements. Each block contained the specific real-mode drivers needed
for that environment.
[Win]: Often contained minimal drivers, as Windows 95 preferred using 32-bit protected-mode drivers once the GUI loaded.[DOSGames]: Contained drivers required for legacy applications, such as real-mode CD-ROM drivers (DEVICE=C:\DRIVERS\OAKCDROM.SYS /D:MSCD001) and memory managers likeEMM386.EXE.[CleanDOS]: Typically loaded onlyHIMEM.SYSto maximize conventional memory.
Any instructions placed under a [common] section applied
universally to every menu choice, eliminating the need to duplicate core
drivers:
[common]
DEVICE=C:\WINDOWS\HIMEM.SYS
DOS=HIGH,UMB
[Win]
[DOSGames]
DEVICE=C:\WINDOWS\EMM386.EXE RAM
DEVICEHIGH=C:\DRIVERS\OAKCDROM.SYS /D:MSCD001
[CleanDOS]
[common]Passing Choices to AUTOEXEC.BAT via %CONFIG%
When a user selected an option from the menu, the system
automatically saved the chosen block name into an environment variable
named %CONFIG%.
Users routed startup scripts inside AUTOEXEC.BAT using
conditional GOTO statements based on this variable:
@ECHO OFF
GOTO %CONFIG%
:Win
win
GOTO End
:DOSGames
LH C:\DRIVERS\MSCDEX.EXE /D:MSCD001
LH C:\DRIVERS\MOUSE.COM
SET SOUND=C:\SB16
GOTO End
:CleanDOS
ECHO Minimal DOS loaded.
GOTO End
:EndInteracting with MSDOS.SYS
To ensure the custom menu functioned properly and did not default
immediately into the Windows 95 desktop, users frequently modified the
hidden C:\MSDOS.SYS file. Setting BootGUI=0 in
the [Options] section prevented Windows 95 from
automatically launching the desktop environment, allowing the
:Win block in AUTOEXEC.BAT to manage when the
win command was actually called. Alternatively, leaving
BootGUI=1 allowed Windows 95 to load the GUI automatically,
but only after processing whichever CONFIG.SYS block was
selected.