Note: This API call is for DOS and Win16 personality only. Use Family API for portability.

Int 21H, AH=30H

Version

2 and higher

Brief

GET DOS VERSION

Family API

Input

AH = 30h

—DOS 5+ —

AL = what to return in BH
00h OEM number (see #01394)
01h version flag

Return

AL = major version number (00h if DOS 1.x)

AH = minor version number
BL:CX = 24-bit user serial number (most versions do not use this)

—if DOS <5 or AL=00h—

BH = MS-DOS OEM number (see #01394)

—if DOS 5+ and AL=01h—

BH = version flag
bit 3: DOS is in ROM
other: reserved (0)

Notes

the OS/2 v1.x Compatibility Box returns major version 0Ah (10)

the OS/2 v2.x Compatibility Box returns major version 14h (20)

OS/2 Warp 3.0 Virtual DOS Machines report v20.30; Warp 4 VDMs report v20.40.

the Windows NT DOS box returns version 5.00, subject to SETVER

DOS 4.01 and 4.02 identify themselves as version 4.00; use INT 21/AH=87h to distinguish between the original European MS-DOS 4.0 and the later PC-DOS 4.0x and MS-DOS 4.0x

IBM DOS 6.1 reports its version as 6.00; use the OEM number to distinguish between MS-DOS 6.00 and IBM DOS 6.1 (there was never an IBM DOS 6.0)

IBM's PC DOS 7 and Y2K updates report themselves as IBM 7.0 to be distinguished from the MS-DOS 7.0 portion of Windows 95.

MS-DOS 6.21 reports its version as 6.20; version 6.22 returns the correct value

Windows95 returns version 7.00 (the underlying MS-DOS), as did the “Chicago” beta (reported in _Microsoft_Systems_Journal_,August 1994); Windows95 OSR2 and OSR2.5 (OPK3) return MS version 7.10

DR DOS 5.0 and 6.0 report version 3.31; Novell DOS 7 reports IBM v6.00, which some software displays as IBM DOS v6.10 (because of the version mismatch in true IBM DOS, as mentioned above). The Novell DOS 7 SETVER.EXE has an undocumented option /G x.y which sets the “global” DOS version returned by this function for all executables not given a specific version number in SETVER to major version x and minor version y.

Heiko Goeman's Advanced WinDOS 2.10/2.11/2.21 returns “IBM” DOS 5.00 (subject to SETVER) and serial number 0.

All versions of CCI Multiuser DOS up to “CCI Multiuser DOS 7.22 Gold” as of 1997-02-10 report DOS 3.31.

DR DOS 3.31, 3.32, 3.33, 3.34, 3.35, 3.40, 3.41, 5.0, 6.0 and DR PalmDOS/NetWare PalmDOS 1.0 report version 3.31; DR DOS “Panther” BETA 1 and “StarTrek” report as 5.0. Novell DOS 7, OpenDOS 7.01, DR-OpenDOS 7.02, DR-DOS 7.02, DR-DOS 7.03 all report themselves as IBM 6.00, which some software displays as IBM DOS 6.10 (because of the version mismatch in true IBM DOS, as mentioned above). Use INT 21/AX=4452h to distinguish the DR-DOS family from PC DOS.

The Novell DOS 7 and OpenDOS 7.01 SETVER.EXE has an undocumented option /G x.y which sets the “global” DOS version returned by this function for all executables not given a specific version number in SETVER to major version x >= 5 and minor version y = 0..254, y = 255 is used to disable the BDOS version check at INT 21/AX=4452h.

A slightly modified option has been documented for DR-OpenDOS 7.02+: in /X mode it now allows for x >= 1, while y >= 100 requires /X mode, and y >= 128 is used to control advanced version control means now (see below).

DR-DOS 7.02+ IBMDOS.COM (since 1998-01-10) now recognizes optional paths to filenames stored in the SETVER list. Previously such entries were never found. This allows for a three staged model for SETVERed versions: highest priority = entry with path is matching. middle priority = entry without path is matching. lowest priority = use global version (SETVER /G).

The DR-DOS 7.02+ SETVER 1.01+ (1998-01-12) has also been enhanced to allow DOS *and* BDOS version faking (see INT 21/AX=4452h): In /X mode, setting a sub-version of y = 128..255 will be reported as 0..127 DOS sub-version, sub-versions of y = 100..127 will instead be used to report this value as BDOS version (64h..7Fh) via INT 21/AX=4452h, and the DOS revision stored in PCM_HEADER in the IBMDOS.COM file will be used to report the DOS sub-version (usually this holds 0, but it can be patched to other values, see INT 21/AX=4452h !!!). Note, that DR-DOS SHARE 2.05+ (1998-01-05) has relaxed version checking, and will install on any DOS revision 0..127, as long as run on a DR-DOS 72h+ kernel (formerly it was bound to a revision byte of 0 only).

Under Novell DOS 7+, the SETVERing also affects the version number WORD stored at offset +40h in each program's PSP (see #01378). This holds true even for special sub-versions of 100..255 (see INT 21/AX=4452h).

generic MS-DOS 3.30, Compaq MS-DOS 3.31, and others identify themselves as PC-DOS by returning OEM number 00h

the version returned under DOS 4.0x may be modified by entries in the special program list (see #01662 at AH=52h); the version returned under DOS 5+ may be modified by SETVER–use AX=3306h to get the true version number

Values for DOS OEM number:

00h	*	IBM
-	(Novell DOS, Caldera OpenDOS, DR-OpenDOS, and DR-DOS 7.02+ report IBM as their OEM)
01h	*	Compaq
02h	*	MS Packaged Product
04h	*	AT&T
05h	*	ZDS (Zenith Electronics, Zenith Electronics) Note: Zenith DOS 3.30 supports >32MB hard disks; this OEM ID can be used to detect that support
06h	*	Hewlett-Packard
07h	*	Zenith Data Systems (ZDS, Groupe Bull), for DOS 5.0+
08h	*	Tandon
09h	*	AST (AST Europe Ltd.)
0Ah	*	Asem
0Bh	*	Hantarex
0Ch	*	SystemsLine
0Dh	*	Packard-Bell
0Eh	*	Intercomp
0Fh	*	Unibit
10h	*	Unidata
16h	*	DEC
17h	*	Olivetti DOS
23h	*	Olivetti (may have been a typo, since 23 = 17h)
28h	*	Texas Instruments
29h	*	Toshiba
33h	-	Novell (Windows/386 device IDs only)
34h	*	MS Multimedia Systems (Windows/386 device IDs only)
35h	*	MS Multimedia Systems (Windows/386 device IDs only)
4Dh	*	Hewlett-Packard (HP)
5Eh	-	RxDOS (Api Software & Mike Podanoffsky) http://www.freedos.org/
66h	-	PhysTechSoft (PTS-DOS) http://www.phystechsoft.com/ probably Paragon Technology Systems Corporation PTS-DOS as well
99h	-	General Software's Embedded DOS
CDh	-	Paragon Technology Systems Corporation (“Source DOS” S/DOS 1.0+) (see also INT 21/AH=20h“S/DOS”)
EDh	-	reserved for future OpenDOS/DR-DOS based projects http://www.drdos.org
EEh	DR DOS
EFh	Novell DOS Note: released versions of Novell DOS 7 use OEM ID 00h instead
FDh	FreeDOS http://www.freedos.org/
FFh	*	Microsoft, Phoenix (listed as “undefined” by Microsoft)

Notes: '*' indicates an OEM release of MS-DOS, while '-' indicates an OEM number used by a non-Microsoft DOS

See also

AX=3306h,INT 15/AX=4900h AH=20h“S/DOS”,INT 2F/AX=122Fh,INT 2F/AX=4010h,INT 2F/AX=4A33h INT 2F/AX=E002h

Note

Text based on Ralf Brown Interrupt List Release 61

DOS API
Process manager	INT 20H, INT 21H: 00H, 25H, 26H, 31H, 34H, 35H, 4BH, 4CH, 4DH, 50H, 51H, 52H, 55H, 62H, INT 22H, INT 27H, INT 28H
File manager	INT 25H, INT 26H, INT 21H: 0DH, 0EH, 0FH, 10H, 11H, 12H, 13H, 14H, 15H, 16H, 17H, 19H, 1AH, 1BH, 1CH, 21H, 22H, 23H, 24H, 27H, 28H, 29H, 2EH, 2FH, 32H, 3305H, 36H, 39H, 3AH, 3BH, 3CH, 3DH, 3EH, 3FH, 40H, 41H, 42H, 4300H, 4301H, 45H, 45H, 46H, 4EH, 4FH, 54H, 56H, 5700H, 5701H, 5AH, 5BH, 5c00H, 5c01H, 60H, 67H, 68H, 6900H, 6901H, 6AH, 6CH
Character Device I/O	INT 29H, INT 21H: 01H, 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H, 0AH, 0BH, 0AH, 0CH, 5D07H, 5D08H, 5D09H, 5D0AH
Signals	INT 23H, INT 24H, INT 21H: 3300H, 3301H, 3302H
Memory manager	INT 21H: 48H, 49H, 4AH, 5800H, 5801H, 5802H, 5803H
Date and Time	INT 21H: 2AH, 2BH, 2CH, 2DH
Misc	INT 21H: 30H, 3306H, 3700H, 3701H, 3702H, 3703H, 59H
NLS	INT 21H: 3303H, 3304H, 3800H, 3801H, 6300H, 6301H, 6301H, 6500H, 6501H, 6502H, 6503H, 6504H, 6505H, 6506H, 6507H, 6520H, 6521H, 6522H, 6523H, 65A0H, 65A1H, 65A2H, 6601H, 6602H
Devices	INT 21H: 4400H, 4401H, 4402H, 4403H, 4404H, 4405H, 4406H, 4407H, 4408H, 4409H, 440AH, 440BH, 440CH, 440DH, 440EH, 440FH, 4410H, 4411H, 53H
Network	INT 21H: 5E00H, 5E01H, 5E02H, 5E03H, 5E04H, 5E05H, 5F00H, 5F01H, 5F02H, 5F03H, 5F04H, 5F05H, 5F07H, 5F08H
osFree Macro Library
Video I/O	@SetMode @SetCurSz @SetCurPos @GetCur @SetPage @ScrollUp @ScrollDn @Scroll @GetChAtr @PutChAtr @PutCh @SetPalet @SetColor @SetDot @GetDot @WrtTTY @VideoState @GetMode @GetDisplay @GetVideoState @GetEGAInfo @Cls
Hardware info	@Equipment @MemSize
Serial I/O	@AuxInit @AuxSendChar @AuxRecieveChar @AuxStatus
Tape I/O	@TapeOn @TapeOff @TapeRead @TapeWrite
Keyboard I/O	@KbdStatus @CharIn @CharPeek
Printer I/O	@PrnPrint @PrnInit @PrnStatus
Disk I/O	@DskReset @DskStatus @DskRead @DskWrite @DskVerify @DskFormat
Date and Time	@SetTime @GetTime
Mouse	@MouInit @MouShowPointer @MouStatus @MouSetPos @MouSetMickey @MouRegion
Memory manager	@ModBlok SET_BLOCK
Family API
DOS	Process Manager	DosBeep DosExit DosSleep DosExecPgm
File Manager	DosChDir DosChgFilePtr DosClose DosDelete DosDupHandle DosMkDir DosMove DosQCurDir DosQCurDisk DosSetFileMode DosOpen DosQFileInfo DosRead DosQFileMode DosQFSInfo DosQVerify DosRmDir DosSelectDisk DosFindClose DosFindFirst DosFindNext DosSetFileInfo DosSetVerify DosWrite DosFileLocks DosSetFHandState DosNewSize DosBufReset DosQFHandState DosSetFSinfo DosShutdown
Memory Manager	DosFreeSeg DosSubAlloc DosSubFree DosSubSet DosAllocHuge DosAllocSeg DosReallocHuge DosReallocSeg DosGetHugeShift DosCreateCSAlias
NLS	DosCaseMap DosGetCtryInfo DosGetDBCSEv DosSetCtryCode DosGetCollate DosGetMessage DosInsMessage DosPutMessage
Date and Time	DosSetDateTime DosGetDateTime
Devices	DosDevConfig DosDevIOCtl DosDevIOCtl2
Signals	DosHoldSignal DosSetSigHandler
Misc	BadDynLink DosGetEnv DosGetMachineMode DosGetVersion DosError DosErrClass DosSetVec
KBD	KbdCharIn KbdFlushBuffer KbdGetStatus KbdSetStatus KbdStringIn KbdPeek
VIO	VioGetBuf VioGetConfig VioGetCurPos VioGetCurType VioGetPhysBuf VioReadCellStr VioReadCharStr VioScrollUp VioScrollDn VioScrollLf VioScrollRt VioScrUnLock VioSetCurPos VioSetCurType VioSetMode VioGetMode VioShowBuf VioWrtCellStr VioWrtCharStr VioWrtCharStrAtt VioWrtNAttr VioWrtNCell VioWrtNChar VioWrtTTY VioScrLock VioPopUp
Tools	BIND
Modules	DOSCALLS.DLL VIOCALLS.DLL KBDCALLS.DLL MSG.DLL
Libraries	API.LIB OS2386.LIB FAPI.LIB DOSCALLS.LIB SUBCALLS.LIB