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 is menuitem=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, 1

Defining 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 like EMM386.EXE.
  • [CleanDOS]: Typically loaded only HIMEM.SYS to 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

:End

Interacting 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.