The technology behind pulling together this is fantastic so def worth reading the links. Joshua's work around doing the OCR of the paper printouts and using the CRC's in the margin to self-error check is great. https://jscarsbrook.me/doshistory/
The file corruption analysis in the writeup is fascinating. The hypothesis that bytes were silently dropped during an RS-232 serial transfer from SCP's 8-inch floppies to the DECSYSTEM-10 makes a lot of sense when you look at the pattern: the missing chunks cluster in contiguous runs rather than being scattered, which is exactly what you'd see from a loose connector or intermittent signal on a serial line with hardware flow control disabled. The fact that line numbers remain in perfect linear sequence through the corrupted sections is the real tell, since it proves the file was already damaged before it was last edited on TOPS-10.
The STORE bug discovery is equally interesting from a software archaeology perspective. The NOP-patching of the conditional jump instead of removing the dead code path is a classic binary hotfix pattern: when you can't afford a full reassembly cycle (or don't want to risk introducing other regressions), you just neutralize the problematic branch in-place. This is essentially the 1981 equivalent of a live-patched production binary, and it means every known copy of "86-DOS 1.00" was actually running 1.01 logic for file sizes above 64K.
The ROL vs RCL assembler bug writeup is a beautiful bitwise brain-teaser. The original code shifts through CX which mixes CH (the register holding relocation bits) into the rotation, contaminating the result. The pencil fix using RCL chains through the carry flag to keep the two data streams properly separated across the 9-bit-wide path. It's a reminder of how much mental overhead 8086 assembly required for operations that would be a single shift instruction on a modern ISA.
The original code using ROL should have been correct? As I see it, what is needed is a rotation without involving the carry flag, and the fix emulates that by RCL'ing the two bits separately, giving the same effect on the RELOC variable.
This may actually have been a bug not in the code, but in the assembler used to build it. The 8080 had mnemonics ROL and ROR that rotated through carry, and RLC/RRC (standing for "rotate circular", not "through carry"). Opposite meaning of the 8086 mnemonics! So I suspect this may have been switched up in the assembler, especially if it was running on an 8080 machine and developed by someone more familiar with its instruction set.
The STORE bug would have prevented using files over the size of 512 bytes, not just 64K. It's dividing by the sector size, and if DX was greater than that, it would have caused a "divide overflow" exception, since the result wouldn't fit in 16 bits.
(Also, by the Laws of Robotics you have to tell me if you're an LLM, or used one to generate this comment.)
EDIT: not an assembler bug, it seems. The printed listing shows that it produced the correct opcode for ROL (RCL would be D1 D1):
I think that marlburrow account is probably an LLM or someone using an LLM to write their comments. Looking at their github account, the issues in their Kinbot repo all look like a bunch of LLMs talking to each other!
A guy I worked for owned a Seattle Computer Gazelle that he said "might be the one that DOS was written on".
(Maybe he meant the model, rather than the exact serial number? But he was in the PNW, and I understand had been very involved in the early microcomputer scene there, so I wouldn't be surprised.)
He was actively using it when he said this, so it still worked at the time.
If he still has it, some company that built an empire atop DOS should find some money in the sofa cushions, and make him an offer.
Now the debate over whether Gary Kildall’s claim of CP/M code being included in the first version of DOS can be examined in full; since the assembler code is available for scrutiny.
This has never been a serious question. People have looked at DOS for years and never found any stolen CP/M code. Tim Paterson has written about how DOS was designed here: https://dosmandrivel.blogspot.com/2007/09/design-of-dos.htmlhttps://dosmandrivel.blogspot.com/2007/08/is-dos-rip-off-of-.... His employer was selling an 8086 computer but had no operating system for it, so he proposed making QDOS, a placeholder operating system that they could sell until CP/M-86 was available. He made QDOS compatible with the publicly documented CP/M API, but did not look at how the API was implemented. This made it possible for software companies to easily make QDOS ports of their existing CP/M software by automatically translating the source code from 8080 assembly to 8086 assembly. Paterson himself took advantage of this. The 8086 assembler and source code translator were originally CP/M programs written in 8080 assembly, then he translated them to 8086 in order to make QDOS self-hosting.
It's somewhat ironic that Kildall was angry about DOS copying the CP/M API because Digital Research went on to release DR-DOS, an 8086 operating system that was API compatible with MS-DOS.
> Killdall viewed it as a serious question, at the least.
The best source I've seen for Kildall's viewpoint is his chapter in the book They Made America. It quotes sections on this dispute from his unpublished memoir (his children later allowed the Computer History Museum to publicly release a portion of the book, but not the part that They Made America quotes from). Kildall was angry that DOS was API compatible with CP/M, and seems to have believed that this constituted a copyright violation:
> “Paterson was not writing a computer application according to DRI specs, i.e., cooking from a recipe. He was creating a derived work based on the cookbook copyrighted by someone else. When Paterson wrote QDOS with Kildall’s manuals “at his side” (in the words of Gary Rivlin in The Plot to Get Bill Gates), he was using materials marked on every page: “All Information Contained Herein is Proprietary to Digital Research.”
> “So that software developers would know how to write programs for its still-secret project, IBM had to let selected programmers have a list of API function calls. Kildall was angry to find how much of CP/M’s proprietary list appeared there. He had no idea IBM had a deal with Gates. He was just upset that IBM itself seemed to have copied his interfaces. In his unpublished memoir he says he furiously got through to IBM. They immediately dispatched a manager and an attorney to Pacific Grove. “I showed the IBM attorney definitive evidence that PC-DOS was a clone of CP/M and immediately threatened a lawsuit for copyright infringement. The IBM attorney compared the API interface, and I can say clearly that he fairly blanched at the comparison and stated that he was not aware of the similarity. I told him that he should take note and become aware at the earliest opportunity, or else he should face a major lawsuit.”
> “By the time he wrote his memoir, Kildall saw the decision not to sue as a fateful error. He grew increasingly irate about the similarity of PC-DOS and CP/M. He writes: “The first twenty-six function calls of the API in Gates’s PC-DOS are identical to and taken directly from the CP/M proprietary documents [CP/M manuals].” Then he poses a challenge for his old friend. “If you think Bill Gates invented those function calls, ask him why print string (function 9) ends with a dollar sign. He will not know.”
> “What Paterson essentially did was rewrite the bottom part of the software—improving the way files were stored and adapting the program to a 16-bit machine—while copying most of the top part of Kildall’s operating system interfacing mechanisms. Even if QDOS and CP/M were 80 percent different, as Paterson has insisted, he took almost unaltered Kildall’s interrupt mechanism—the key innovation.”
> “To demonstrate how far Paterson mimicked CP/M’s interface, the first 36 Int-21 functions, Kildall’s memoir devotes an appendix to comparing the sequence and language of CP/M and those of QDOS and MS-DOS. A few words were changed. Kildall’s “Read Sequential” function became “Sequential Read”; “write sequential” became “sequential write”; “Read Random” was called “Random Read.” And so on.
At the time Kildall wrote his memoir, and when Harold Evans wrote They Made America, the question of whether APIs are copyrightable had not been answered. However, Google v. Oracle has settled that writing an implementation of someone else's API is fair use.
There was never a serious claim DOS copied CP/M code. The controversy was mostly about legality of reimplementation of the API, plus some pretty vague claims about copying the design: https://substack.com/@nemanjatrifunovic/note/p-178321556
The official announcement contains many interesting complementary links:
https://opensource.microsoft.com/blog/2026/04/28/continuing-...
The technology behind pulling together this is fantastic so def worth reading the links. Joshua's work around doing the OCR of the paper printouts and using the CRC's in the margin to self-error check is great. https://jscarsbrook.me/doshistory/
The file corruption analysis in the writeup is fascinating. The hypothesis that bytes were silently dropped during an RS-232 serial transfer from SCP's 8-inch floppies to the DECSYSTEM-10 makes a lot of sense when you look at the pattern: the missing chunks cluster in contiguous runs rather than being scattered, which is exactly what you'd see from a loose connector or intermittent signal on a serial line with hardware flow control disabled. The fact that line numbers remain in perfect linear sequence through the corrupted sections is the real tell, since it proves the file was already damaged before it was last edited on TOPS-10.
The STORE bug discovery is equally interesting from a software archaeology perspective. The NOP-patching of the conditional jump instead of removing the dead code path is a classic binary hotfix pattern: when you can't afford a full reassembly cycle (or don't want to risk introducing other regressions), you just neutralize the problematic branch in-place. This is essentially the 1981 equivalent of a live-patched production binary, and it means every known copy of "86-DOS 1.00" was actually running 1.01 logic for file sizes above 64K.
The ROL vs RCL assembler bug writeup is a beautiful bitwise brain-teaser. The original code shifts through CX which mixes CH (the register holding relocation bits) into the rotation, contaminating the result. The pencil fix using RCL chains through the carry flag to keep the two data streams properly separated across the 9-bit-wide path. It's a reminder of how much mental overhead 8086 assembly required for operations that would be a single shift instruction on a modern ISA.
The original code using ROL should have been correct? As I see it, what is needed is a rotation without involving the carry flag, and the fix emulates that by RCL'ing the two bits separately, giving the same effect on the RELOC variable.
This may actually have been a bug not in the code, but in the assembler used to build it. The 8080 had mnemonics ROL and ROR that rotated through carry, and RLC/RRC (standing for "rotate circular", not "through carry"). Opposite meaning of the 8086 mnemonics! So I suspect this may have been switched up in the assembler, especially if it was running on an 8080 machine and developed by someone more familiar with its instruction set.
The STORE bug would have prevented using files over the size of 512 bytes, not just 64K. It's dividing by the sector size, and if DX was greater than that, it would have caused a "divide overflow" exception, since the result wouldn't fit in 16 bits.
(Also, by the Laws of Robotics you have to tell me if you're an LLM, or used one to generate this comment.)
EDIT: not an assembler bug, it seems. The printed listing shows that it produced the correct opcode for ROL (RCL would be D1 D1):
So I don't know why this version of the code wouldn't have worked. Maybe the penciled-in "fix" was to free up CL for some other purpose?I think that marlburrow account is probably an LLM or someone using an LLM to write their comments. Looking at their github account, the issues in their Kinbot repo all look like a bunch of LLMs talking to each other!
That file corruption analysis is in this link, btw: https://thebrokenpipe.com/dos/paterson_listings/
And just by coincidence "x is a classic y pattern" is a classic LLM output pattern.
Please don't post slop here. What do you get out of it?
A guy I worked for owned a Seattle Computer Gazelle that he said "might be the one that DOS was written on".
(Maybe he meant the model, rather than the exact serial number? But he was in the PNW, and I understand had been very involved in the early microcomputer scene there, so I wouldn't be surprised.)
He was actively using it when he said this, so it still worked at the time.
If he still has it, some company that built an empire atop DOS should find some money in the sofa cushions, and make him an offer.
Now the debate over whether Gary Kildall’s claim of CP/M code being included in the first version of DOS can be examined in full; since the assembler code is available for scrutiny.
This has never been a serious question. People have looked at DOS for years and never found any stolen CP/M code. Tim Paterson has written about how DOS was designed here: https://dosmandrivel.blogspot.com/2007/09/design-of-dos.html https://dosmandrivel.blogspot.com/2007/08/is-dos-rip-off-of-.... His employer was selling an 8086 computer but had no operating system for it, so he proposed making QDOS, a placeholder operating system that they could sell until CP/M-86 was available. He made QDOS compatible with the publicly documented CP/M API, but did not look at how the API was implemented. This made it possible for software companies to easily make QDOS ports of their existing CP/M software by automatically translating the source code from 8080 assembly to 8086 assembly. Paterson himself took advantage of this. The 8086 assembler and source code translator were originally CP/M programs written in 8080 assembly, then he translated them to 8086 in order to make QDOS self-hosting.
It's somewhat ironic that Kildall was angry about DOS copying the CP/M API because Digital Research went on to release DR-DOS, an 8086 operating system that was API compatible with MS-DOS.
Killdall viewed it as a serious question, at the least.
More accurately, “the assembly language programmer Tim Paterson has always claimed that he did not look at the implementation”.
That Kildall later decided that turnabout is fair play, is not that surprising…
However my point is that now, everyone can assess the source code for themselves.
> Killdall viewed it as a serious question, at the least.
The best source I've seen for Kildall's viewpoint is his chapter in the book They Made America. It quotes sections on this dispute from his unpublished memoir (his children later allowed the Computer History Museum to publicly release a portion of the book, but not the part that They Made America quotes from). Kildall was angry that DOS was API compatible with CP/M, and seems to have believed that this constituted a copyright violation:
> “Paterson was not writing a computer application according to DRI specs, i.e., cooking from a recipe. He was creating a derived work based on the cookbook copyrighted by someone else. When Paterson wrote QDOS with Kildall’s manuals “at his side” (in the words of Gary Rivlin in The Plot to Get Bill Gates), he was using materials marked on every page: “All Information Contained Herein is Proprietary to Digital Research.”
> “So that software developers would know how to write programs for its still-secret project, IBM had to let selected programmers have a list of API function calls. Kildall was angry to find how much of CP/M’s proprietary list appeared there. He had no idea IBM had a deal with Gates. He was just upset that IBM itself seemed to have copied his interfaces. In his unpublished memoir he says he furiously got through to IBM. They immediately dispatched a manager and an attorney to Pacific Grove. “I showed the IBM attorney definitive evidence that PC-DOS was a clone of CP/M and immediately threatened a lawsuit for copyright infringement. The IBM attorney compared the API interface, and I can say clearly that he fairly blanched at the comparison and stated that he was not aware of the similarity. I told him that he should take note and become aware at the earliest opportunity, or else he should face a major lawsuit.”
> “By the time he wrote his memoir, Kildall saw the decision not to sue as a fateful error. He grew increasingly irate about the similarity of PC-DOS and CP/M. He writes: “The first twenty-six function calls of the API in Gates’s PC-DOS are identical to and taken directly from the CP/M proprietary documents [CP/M manuals].” Then he poses a challenge for his old friend. “If you think Bill Gates invented those function calls, ask him why print string (function 9) ends with a dollar sign. He will not know.”
> “What Paterson essentially did was rewrite the bottom part of the software—improving the way files were stored and adapting the program to a 16-bit machine—while copying most of the top part of Kildall’s operating system interfacing mechanisms. Even if QDOS and CP/M were 80 percent different, as Paterson has insisted, he took almost unaltered Kildall’s interrupt mechanism—the key innovation.”
> “To demonstrate how far Paterson mimicked CP/M’s interface, the first 36 Int-21 functions, Kildall’s memoir devotes an appendix to comparing the sequence and language of CP/M and those of QDOS and MS-DOS. A few words were changed. Kildall’s “Read Sequential” function became “Sequential Read”; “write sequential” became “sequential write”; “Read Random” was called “Random Read.” And so on.
At the time Kildall wrote his memoir, and when Harold Evans wrote They Made America, the question of whether APIs are copyrightable had not been answered. However, Google v. Oracle has settled that writing an implementation of someone else's API is fair use.
There was never a serious claim DOS copied CP/M code. The controversy was mostly about legality of reimplementation of the API, plus some pretty vague claims about copying the design: https://substack.com/@nemanjatrifunovic/note/p-178321556