Purpose of MS-DOS 6.22 SETVER Command Table

The MS-DOS 6.22 SETVER command table is a built-in compatibility mechanism designed to trick legacy software into believing it is running on an earlier version of MS-DOS. Many older DOS programs were hardcoded to function only with specific DOS releases, causing them to abort with an "Incorrect DOS version" error when launched on MS-DOS 6.22. The SETVER table maintains a list of program filenames paired with simulated DOS version numbers, allowing the operating system to return a compatible version number upon request and preserve application compatibility without altering program code.

In MS-DOS, applications typically check the operating system version by issuing an interrupt call (specifically, Interrupt 21h, Function 30h). If the returned major and minor version numbers do not match the program's strict internal criteria, the program refuses to run. Because MS-DOS 6.22 introduced changes to kernel reporting while remaining functionally compatible with previous versions, this rigid version-checking routine created artificial barriers for users upgrading their systems.

The SETVER subsystem operates in two parts: a device driver (SETVER.EXE loaded via CONFIG.SYS) and an executable command-line utility of the same name. When loaded into memory, the SETVER.EXE driver intercepts Interrupt 21h version check calls. It compares the filename of the running application against its internal lookup table. If a match is found, the driver overrides the true MS-DOS 6.22 response and returns the specific version number registered in the table. If an application is not listed, the system reports version 6.22 as normal.

The SETVER table itself contains a pre-populated list of well-known commercial applications known to require version spoofing. However, users can manage this table directly through the command line:

  • To view the current contents of the table, run SETVER.
  • To add a new program entry or modify an existing one, run SETVER [filename.ext] [version], such as SETVER PROGRAM.EXE 5.00.
  • To delete an entry from the table, run SETVER [filename.ext] /DELETE.

Any modifications to the table are written directly to the SETVER.EXE file on disk. Consequently, changes take effect only after rebooting the system so the driver can reload the updated table into memory. Through this architecture, the SETVER command table serves as an indispensable tool for maintaining backward compatibility across diverse DOS environments.