• Please review our updated Terms and Rules here

Earliest known copies of 86-DOS...

That would be something to test: does the CALL 5 interface exist in the earliest version of SCP-DOS?

One other difference between CP/M-86 and MS-DOS is that CP/M-86 uses CL to pass arguments while DOS did it with AH. CL is what one gets with automatic 8080 to 8086 conversion so it always seemed a bit odd that DRI forced the code to be rewritten to use interrupt E0. DOS's code for CALL 5 was complex as the stack gets reordered and the function is moved from CL to AH before going into the standard INT 21 handler.
Yes. It is there. I show it in the (%#@%)#@ video. :) see here: https://forum.vcfed.org/index.php?threads/earliest-known-copies-of-86-dos.1246146/post-1359158

I swear, it's like people refuse to listen or read, or something. :)

-Thom
 
...this idiotic rumor still persists because "THE FUNCTION CALLS ARE THE SAME"

There was yet another thread slandering Tim Patterson here just a few months ago so, yeah, it’d be really nice if this BS would get put to bed once and for all.

OSes were small enough in the late 1970’s that a smart CompSci student with access to a manual could pretty easily write CP/M over their summer vacation, and many a court case has made it clear that writing your own implementation of a public API is fair game. But, no, this story has just got to have a villain.
 
I recently found this - interviews with everyone at MSFT including Bill Gates, Steve Ballmer, Paul Allen, and Tim Paterson also...
I can't determine what TV show or video series it is from, however.

Would I say the villain is Tim Paterson? No. Does Tim explicitly say that he bought a book on CPM and copied the API? Yes.
 
making a system compatible at the API layer is not "copying code"
I am not sure if you are responding to me but I didn't say he was copying code; but it is not in dispute that the API was replicated directly.

It isn't a case of "well this is just a normal offshoot of how you would program such a system and so that is why it looks like CP/M" which I have seen argued in the past by others.
 
Oracle would beg to differ.

(I don't agree with Oracle's position, by the way, but Oracle did sue Google over API copying)

And Oracle lost that one 6-2 at the Supreme Court in 2021. The mic is thoroughly dropped on that argument.

It isn't a case of "well this is just a normal offshoot of how you would program such a system and so that is why it looks like CP/M" which I have seen argued in the past by others.

I suspect you were confused by what they were actually arguing. Nobody in their right mind would argue that MS-DOS's CP/M-compatible API layer just *coincidentally* uses the same BDOS call numbers to implement the same OS function, that is *obviously* replication of the published(*), documented entry points; I would guess they were responding with that when someone tried to pull a Perry Mason and say "Oh! Look at this! They used the "same" Assembly code to add 2+2 right here!". When, yes, when the thing they're pointing at is something painfully trivial like "this is how looping through an array works and this is the code you'll get if you ask a child who just read the manual to code it."

(* Published. Like, you know, in a book. Like a book someone would have to buy if they were going to *write* CP/M software, let alone make a functionally compatible clone of it.)
 
... I guess what I find particularly funny about this insistence that Microsoft did DRI dirty is how everyone involved admits that CP/M-86 wasn't even a thing when Tim Patterson wrote 86-DOS (There'd been a vaporware announcement for it in 1979, but Seattle Computer Products decided they couldn't just sit on their hands and wait for it), and when DRI *did* write CP/M-86 programs written for it were *not* directly compatible with QDOS/86-DOS/MS-DOS's implementation. (As noted, they differed in some pretty fundamental ways, like how those "CP/M compatible" system calls were accessed.) Making a thing intentionally designed to appeal to people who are already used to a similar thing is generally legal as long as you're not actually stealing copyrightable, patentable, or trademarkable elements from the other thing; it's in fact how free markets work.

Something particularly ironic about this situation is how QDOS used the FAT file system because of Microsoft's success in providing Seattle Computer Products a working version of their semi-fringe Stand-Alone Disk BASIC product for the 8086 in just a couple months, unlike DRI who didn't release CP/M-86 until over two years later. (Not to mention it’s also really good counter-evidence in the broader sense against there being any direct copying; if they were ripping off CP/M wholesale why wouldn’t they copy the filesystem? And, for that matter, why would they change the names and syntaxes of so many commands?) When IBM just wanted a cheap OS for a their new "cheap" computer ASAP DRI didn't have a working product that fit their need yet, and they faceplanted hard on negotiating reasonable terms for their vaporware product *after* Microsoft gave them first dibs at the deal. That they lost is their fault. In the end DRI arguably stole a lot more from Microsoft (FAT filesystem, the MS-DOS 2.x APIs, etc) than MS or Tim Patterson *ever* stole from them.

A lot of people just love parroting that fanciful story by Jerry Pournelle that Gary Kildall used to run around showing off a secret easter egg that was in both CP/M and MS-DOS, but not only has nobody ever been able to demonstrate it, from what I can tell that story didn't start circulating until the 1990's. I'm not going to say that the people saying it were entirely *lying*, it's certainly possible they remember a bitter Kildall demonstrating some kind of program he wrote or that he was convinced (or thought would convince other people) that there was illegal hanky panky going on (*), but I would to bet a shiny new quarter that the people who remember it being some kind of easter egg embedded in the OSes themselves got it confused with some other famous OS Easter Egg story. And there are some good ones out there, like Microsoft BASIC's WAIT 6502, the Mac's Stolen from Apple Icon, or the secret message Randy Cook buried inside of TRS-DOS 2.1, which *was* actually kind of a big deal.

... in fact, I really have to wonder if these people making the claim about the CP/M easter egg were thinking of the TRS-DOS story, because it's the one that most closely matches and by the mid-1990's some of the guys telling it might have purged the existence of TRS-80s from their brains while still remembering an interesting story.

(* There are some odd/bitter quotes from Kildall floating around like "Ask Bill [Gates] why the string in [MS-DOS] function 9 is terminated by a dollar sign. Ask him, because he can’t answer. Only I know that.” like, again, it's a smoking gun that proves something. I dunno, maybe he used to pop into DEBUG and write a little 20 byte program to call BDOS 9 to print his name and scream "SEE! STOLEN! I HAD TO USE A DOLLAR SIGN!!!", but, well, that's something that's in the API documentation, and anyone who ever wrote a CP/M program needed to know that. Not proof of pirated code, not remotely.)
 
Last edited:
It was Pournelle who started the rumor? Good grief.

As far as stolen names, gee, where did DDT and PIP come from? I know--those rats at DEC had a secret time machine and went back in time to copy CP/M...
 
It was Pournelle who started the rumor? Good grief.

I saw one reference that also implicated John C. Dvorak, but I would guess he was probably just repeating a thing he heard, not the originator. I mean, the guy was a huge fan of the Chang Modification, set your expectations appropriately when evaluating anything he's passing along.
 
(* There are some odd/bitter quotes from Kildall floating around like "Ask Bill [Gates] why the string in [MS-DOS] function 9 is terminated by a dollar sign. Ask him, because he can’t answer. Only I know that.” like, again, it's a smoking gun that proves something. I dunno, maybe he used to pop into DEBUG and write a little 20 byte program to call BDOS 9 to print his name and scream "SEE! STOLEN! I HAD TO USE A DOLLAR SIGN!!!", but, well, that's something that's in the API documentation, and anyone who ever wrote a CP/M program needed to know that. Not proof of pirated code, not remotely.)

OK, I have to admit that I don't understand why it's terminated by a dollar sign either... And I have genuinely wondered about this very issue a few times ( Not about Gates/Kildall, just the $ sign... Why didn't they terminate with a null or EOL or something? )

Is there an actual specific reason to this choice?
 
I suspect you were confused by what they were actually arguing. Nobody in their right mind would argue that MS-DOS's CP/M-compatible API layer just *coincidentally* uses the same BDOS call numbers to implement the same OS function, that is *obviously* replication of the published(*), documented entry points; I would guess they were responding with that when someone tried to pull a Perry Mason and say "Oh! Look at this! They used the "same" Assembly code to add 2+2 right here!". When, yes, when the thing they're pointing at is something painfully trivial like "this is how looping through an array works and this is the code you'll get if you ask a child who just read the manual to code it."

(* Published. Like, you know, in a book. Like a book someone would have to buy if they were going to *write* CP/M software, let alone make a functionally compatible clone of it.)

Actually, when you copy the API, the code that delivers the function is absolutely going to look similar, and even the words you use in labels is going to be remarkably similar at times also... Also, the approach is somewhat dictated by the API and it even affects the order the code is placed in the source.

Some of what I wrote in my own CP/M OS is remarkably similar to what DRI wrote, even though I wrote it all natively in z80 assembler. In other cases I went in a completely different direction or did things very differently. Had I written with limited instructions ( I used IX/IY extensively ) I'm thinking some of the routines would have been almost identical.

But I do wonder, if in a more litigious world, had I written this code back in the 80s and DRI took issue with it, whether the similarities of what I wrote would have made it look like I had copied CP/M? There was no copying, but the only person who knows that with certainty is me, and even now that I finished and compared some parts of CP/M to what I write, I'm not 100% confident I could prove I didn't copy any of it. The best I could probably do is show early versions pre-debugging to demonstrate it was all original code.

It's kind of like the John Fogerty vs John Fogerty copyright issue. It extends way beyond "All John Fogerty songs are going to be similar" to "If you write something to be similar, the code is going to look similar even if it was not copied".
 
Actually, when you copy the API, the code that delivers the function is absolutely going to look similar, and even the words you use in labels is going to be remarkably similar at times also... Also, the approach is somewhat dictated by the API and it even affects the order the code is placed in the source.

Which is kind of reiterating my point: if you're doing a black-box re-implementation (or reverse engineering) of something it's inevitable there are going to be similarities simply because there are only so many logical ways to write the code necessary to do "X". (And these similarities are likely to go beyond the code itself; if you're writing the code to implement a call for "output string" I'm going to bet there's a good chance you're going to have some namespace collision in label names and comments; maybe you'll both have a label called OUTCHR that shoves the current letter of the string you're incrementing through to the TTY driver, for instance, because that's a painfully obvious name to use for it.) That doesn't mean you "copied".

I mean, imagine if anyone who ever sat down to write a novel had to make sure that they never happened to write the same sentence as any other novelist with a currently unexpired copyright on a book. We'd have a lot fewer books.
 
Last edited:
Thanks for posting the link... I guess I am not the only one to question this.

A galaxy-brain theory I've seen thrown around about the choice of "$" is Gary might have been familiar with DEC's RADIX-50 encoding for packing strings; $ is one of the few non-alphanumeric symbols supported by the encoding. Not that CP/M used RADIX-50, but more than a few people have noticed that CP/M seems to rip quite a lot off from DEC operating systems of the late 1960's so... *shrug*, it's something he may well have been familiar with.
 
Back
Top