Category: other operating systems

INT 21 - DR DOS 3.41+ - DETERMINE DOS TYPE/GET DR DOS VERSION

	AX = 4452h ("DR")
	CF set
Return: CF set if not DR DOS
	    AX = error code (see #01680 at AH=59h/BX=0000h)
	CF clear if DR DOS
	    AX = version code
	    AH = single-user/multiuser nature (see #01581)
		10h single-user
		    AL = operating system version ID (see #01580)
		14h multiuser
		    AL = operating system version ID (see #01579)
	    DX modified (refer to note below)
Notes:	the DR DOS version is stored in the environment variable VER
	use this function if looking for single-user capabilities, AX=4451h
	  if looking for multiuser; this call should never return multiuser
	  values
	in DR DOS 3.41-6.0, DX=AX on return; for Novell DOS 7, DH=AH but DL=00h
	  (reportedly, DH=00h when booting NWDOS7 from installation disks)
	Novell DOS 7 returns error code 0001h if SETVER x.255 is in effect for
	  the calling program, or SETVER /G x.255 is in effect
	although based on DR DOS, CCI Multiuser DOS 7.xx,
	  IMS Multiuser DOS 7.x, and IMS REAL/32 7.50+ do not support this call
	With OpenDOS 7.02 BETA 2 and DR-OpenDOS 7.02+, the install check
	  in most tools has been changed to run with both, AH=10h and AH=14h
	  to support possible future "client side" multiuser releases of
	  DR-DOS which may return 14h instead of 10h. Tools should also strip
	  off the CP/Net bit before checking the kernel version.
	  Often used version checks like >= 1070h are invalid, therefore,
	  hence the AH and AL must be checked seperately.
	In DR DOS 3.31-6.0, and DR PalmDOS, DX=AX on return.
	For Novell DOS 7 - DR DOS 7.03 the DX value returned by this function
	  is the same as the DX value returned by INT 21/AX=3306h, and
	  represents the DOS revision (bits 7-0, currently always DL=00h) and
	  the version flags (bits 15-8, with bit 12 = DOS in HMA, bit 11 = DOS
	  in ROM) of the "patch_version" field in the PCM_HEADER structure in
	  the IBMDOS.COM file. The version flags, however, are updated at
	  runtime to reflect the actual system status, resulting, for example,
	  in DH=10h for DOS in HMA, and DH=0 when booting Novell DOS 7 from
	  installation disks.
	The operating system version ID represents the BDOS (Basic Disk
	  Operating System) kernel version (of the DRBDOS.SYS aka IBMDOS.COM
	  file), and the two nibbles can actually be read as CP/M version
	  and sub-version, that is DR-DOS 7.03 (version code 1073h) is
	  actually CP/M-86 version 7.3.
	Due to lost original patch sources from the backups, Caldera OpenDOS
	  7.01 merely represented Novell DOS 7 Update 10 with minor changes.
	For Caldera DR-OpenDOS 7.02, all the Novell DOS 7 patches up to
	  including Update 15.2 have been re-incorporated into the system
	  from other sources, while the missing patches for IBMBIO.COM were
	  independently re-implemented by Matthias Paul in 07/1997-10/1997.
	Novell DOS 7 (since 1993-11-08), OpenDOS 7.01 and OpenDOS 7.02 BETA
	  IBMDOS.COM return error code 0001h if SETVER x.255 is in effect
	  for the calling program, or SETVER /G x.255 is in effect.
	Since Caldera DR-OpenDOS 7.02 the SHARE 2.05+ (1998-01-05) driver
	  uses INT 21/AX=65A2h as an *additional* BDOS version check: If the
	  "FUCASE char" function is functional on a DR-DOS BDOS kernel 72h+,
	  SHARE assumes it is running on an OpenDOS 7.02 BETA 1 (73h) kernel
	  (or later) even if the BDOS version returned by INT 21/AX=4452h would
	  indicate an earlier issue of the kernel. Some 3rd party drivers
	  (like HPFS_DOS.EXE) were hardwired to detect Novell DOS 7 only,
	  and so the kernel version had to be patched back on such systems
	  to allow such drivers to work properly. The BDOS version and DOS
	  revision are stored in PCM_HEADER of the IBMDOS.COM file, see
	  table XXXX below.
	However, this is no longer necessary with the introduction of the
	  DR-DOS 7.02+ IBMDOS.COM (since 1998-01-10) and SETVER 1.01+
	  (since 1998-01-12) because they allow to fake BDOS versions as well
	  as faking DOS versions. In /X mode, a set sub-version of y = 100..127
	  will be used as BDOS version instead (64h..7Fh), while the DOS
	  revision will be used to report the DOS sub-version instead. For
	  example, given a DOS revision of 0, SETVER 6.114 would be the proper
	  value to fake Novell DOS 7 (114=72h) on a DR-DOS 7.02+ system,
	  reporting a DOS version of "IBM" 6.00. Sub-versions 128..255 will
	  completely disable this BDOS version check, and report a DOS sub-
	  version of 0..127. This is to work around problems with possibly
	  hostile programs, that try to detect DR-DOS to not run on this OS.
	Additional version check for 1072h kernels: At API level, there
	  is no known way to distinguish Novell DOS 7 from OpenDOS 7.01,
	  however, an IBMBIO.COM/IBMDOS.COM file date since 1997 and the
	  existance of an environment variable %OS%=OPENDOS usually indicates
	  an OpenDOS system (but not the other way around; some OpenDOS
	  BETAs still used %OS%=NWDOS!).
	Additional version checks for 1073h kernels: A functional test of
	  INT 21/AX=65A2h (see above for SHARE) can be used to distinguish
	  OpenDOS 7.02 BETA 1 from the later (OpenDOS 7.02 BETA 2+ and)
	  DR-OpenDOS 7.02 and DR-DOS 7.02 releases, which are both the
	  same, except for the name change and minor bug fixes. Testing
	  for the INT 21/AX=6601h/BX=0000h bug can be used to differentiate the
	  original release of DR-DOS 7.02 from later 7.02 updates and
	  DR-DOS 7.03.
	The DR DOS version is stored in the environment variable VER.
SeeAlso: AX=4412h,AX=4451h,AX=4459h