Try installing Quick Pascal 1.0 on DR DOS 3.40:
What is going on there? It’s a long story…
In 1988, Microsoft became increasingly worried by a new upstart OS from an old rival, DR DOS. Over the years, Digital Research (DRI) had added DOS compatibility to its CP/M-86 based operating systems. Eventually DRI came up with the idea of ditching the CP/M functionality and offering a DOS compatible operating system.
Ordinarily DRI would not stand any chance, but in 1988, the DOS business was not business as usual. IBM took over the development of DOS in 1986 and produced DOS 3.3 and DOS 4.0. Microsoft’s systems group heavily focused on OS/2 and to a lesser extent, Windows 2.x. Microsoft was still licensing MS-DOS to OEMs as before, but there was just a skeleton crew maintaining DOS at Microsoft.
DOS 3.0 was released in 1984, which means that in late 1988, MS-DOS 3.x was getting a little long in the tooth. At the same time DOS 4.0 was not selling well and IBM was slow to fix problems which did not affect IBM hardware. Microsoft had trouble convincing OEMs to license MS-DOS 4.01, and even raised prices of MS-DOS 3.3 to convince OEMs to upgrade.
That created an opening for DR DOS 3.31, released in June 1988 as an OEM-only product. Before the end of the year, this was soon followed by DR DOS 3.32, 3.33, 3.34, and 3.35. In January 1989, DR DOS 3.40 was released.
Microsoft found some OEMs resistant to licensing MS-DOS, a problem that never existed before. DRI was offering ROMable DOS, something Microsoft did not offer at the time. Microsoft could not directly respond but heavily depended on revenue from DOS to finance other projects. Highest echelons of Microsoft’s management were worried:
From: billg To: pascalm; russw; tomle Cc: philba Subject: Dr dos Date: Thursday, September 22, 1988 12:41 PM You never sent me a response on the question of what things an app would do that would make it run on MSDOS and not run with DR-DOS. Is there any version check or api that they fail to have? Is there a feature they have that might get in our way? I am not looking for something they cant get around. I am looking for something that their current binary fails on. This is a fairly urgent question for me and I have received nothing.
Aaron Reynolds, a DOS expert and and one of the authors of DOS 3.0, had already examined DR DOS and found that DRI faithfully replicated all documented DOS functionality, and some undocumented too.
About two hours later, Bill Gates got the answer he was looking for, including the following comment:
The bottom line is that, given Aaron's current findings, an application can identify DR DOS. However, most apps usually have no business making the calls that will let them decide which DOS (MS or DR) they are running on. Do you think differently?
Bill Gates certainly did. Russ Werner’s (russw) Status Report for April, 1989 (sent on May 22, 1989) contained the following section:
DRI Competitive Response ------------------------ The first MS product with the non-tested DOS warning code, Quick Pascal, was released. Tom Reeve and Cindy Kasin have committed to implementing it in all new MS application and language releases from this point forward, including international.
And that is why the bogus “valuable warranty” message shows up when running Quick Pascal 1.0 setup on DR DOS 3.40.
How does the Genuine DOS detection code work? It relies on a lot of undocumented information which has absolutely no bearing on the operation of Quick Pascal, or indeed any standard user application.
A commented disassembly of the detection routine may be found here. The way it works is as follows:
- Query the DOS version. If it is less than 3.30, consider everything OK, otherwise probe further.
- Execute undocumented INT 21h/52h to get the DOS “list of lists” in ES:BX.
- Use the undocumented fact that ES now points to the DOS data segment.
- Look at the word at offset 4 in the DOS data segment, which indicates the version of the data format.
- If DOS data segment version is greater than 1, consider everything OK. That handles newer, unknown DOS versions, although in reality the DOS data segment version did not change in DOS 5/6/7.
- Otherwise load SI with 2DEh for DOS data segment version 0 (DOS 3.3) and 330h for version 1 (DOS 4). This is the offset of the current PSP in the DOS data segment.
- Execute undocumented INT 21h/51h to get the current PSP.
- Execute undocumented INT 21h/50h to set the current PSP to 0.
- Check if the word at offset 2DEh/330h in the DOS data segment is now zero. If not, restore the original PSP and fail.
- Execute undocumented INT 21h/50h to set the current PSP to 0FFFFh (in case the word just happened to be zero).
- Check if the word at offset 2DEh/330h in the DOS data segment is now 0FFFFh. If not, restore the original PSP and fail.
- If detection got this far, restore the original PSP and declare the OS a genuine MS-DOS or PC DOS.
Note that the code is run with interrupts enabled. That is problematic because some TSR or background task might gain control and try to use the current PSP. That would likely cause problems when the PSP is deliberately set to an invalid value.
The code obviously has no useful purpose per se, it simply checks whether certain completely undocumented aspects irrelevant to Quick Pascal match MS-DOS 3.3 or 4.0. Et voilà, FUD is successfully spread! At least for a while—DR DOS 3.41 released in July 1989 successfully passes the Quick Pascal check and the vaguely threatening message no longer appears.
PS: Looking for images of DR DOS 3.3x disks. Their existence is well documented, but survivors appear to be surprisingly rare (unlike DR DOS 3.4x and later releases).