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

Int 21H, AH=33H, AL=06H

Version

5.0 and higher

Brief

GET TRUE VERSION NUMBER

Family API

Input

AX = 3306h

Return

BL = major version

BH = minor version
DL = revision (bits 2-0, all others 0)
DH = version flags
bit 3: DOS is in ROM
bit 4: DOS is in HMA
AL = FFh if true DOS version < 5.0

Macro

Notes

this function always returns the true version number, unlike AH=30h, whose return value may be changed with SETVER

because of the conflict from the CBIS redirector (see next entry), programs should check whether BH is less than 100 (64h) and BL is at least 5 before accepting the returned BX as the true version number; however, even this is not entirely reliable when that redirector is loaded

Under MS-DOS/PC DOS, DR DOS, PTS-DOS, S/DOS this function does not use any of the DOS internal stacks and thus is fully reentrant

OS/2 v2.1 will return BX=0A14h (version 20.10)

Windows 95 and Windows 95 SP1 return version 7.00; Windows 95 OSR2 and OPK3 (OSR2.5) return version MS 7.10.

the Windows NT DOS box returns BX=3205h (version 5.50)

Novell DOS 7 returns IBM v6.00, which some software displays as IBM DOS v6.10 (because of the version mismatch in true IBM DOS mentioned for INT 21/AH=30h); versions through Update 15 all return revision code 00h

Windows95 and Windows95 SP1 return version 7.00; Windows95 OSR2 returns version 7.10

Heiko Goeman's Advanced WinDOS 2.10/2.11/2.21 returns DOS 5.00, revision 0.

Novell DOS 7, OpenDOS 7.01, DR-OpenDOS 7.02, DR-DOS 7.02, DR-DOS 7.03 all return IBM 6.00, which some software displays as IBM DOS 6.10 (because of the version mismatch in true IBM DOS mentioned for INT 21/AH=30h); versions through Novell DOS 7 Update 15.2 (01/1996) all return revision code 00h. The DOS revision is stored in bits 7-0 of the “patch_version” field in the PCM_HEADER structure in the IBMDOS.COM file (see also INT 21/AX=4452h !!!). The version flags (DH) are stored in bits 15-8 of “patch_version”, but is updated at runtime to reflect the actual status. “patch_version” is also reported as DX in INT 21/AX=4452h.

Unlike MS-DOS, under Novell DOS 7+ IBMDOS.COM will also allow to SETVER the returned “true” DOS version same as with INT 21/AX=3000h and INT 21/AX=3001h.

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 enables a three staged model of 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 BDOS and DOS version faking (see INT 21/AX=4452h). In /X mode, a set sub-version of y = 128..255 will be reported as 0..127 DOS sub-version, sub-versions of y = 100..127 will be used to report this value as BDOS version (64h..7Fh) with INT 21/AX=4452h instead while bits 6-0 of the DOS revision stored in PCM_HEADER in the IBMDOS.COM file will be used to report the BH DOS sub-version 0..127 (usually this holds 0, but it can be patched to other values).

DR-DOS SHARE 2.05 (1998-01-05) has relaxed version checking now, and will install on any DOS revision 0..127 (formerly it was bound to DOS revision 0 only), as long as run on a DR-DOS 72h or 73h BDOS kernel. Hence, if there will be changes in the SHARE implementation without changing the BDOS version, DR-DOS SHARE 2.05 can still be stopped from installing by changing the DOS revision in PCM_HEADER to something in the range 128..255.

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

S/DOS 1.0 (1995) returns a DOS revision of 9, while its own PTS OEM revision still defaults to 0 (see also INT 21/AH=20h“S/DOS”).

BUG: DR DOS 5.0 and 6.0 return CF set/AX=0001h for INT 21/AH=33h subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh for invalid subfunctions

See also

AH=30h,INT 2F/AX=122Fh,INT 2F/AX=E000h“SETDRVER”

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