What's interesting is when I think about MS-DOS these days, I think I could make a functional duplicate in short order. But nobody did it at the time.
(How I'd do it is write all the semantic code in D, such as the code for EDLIN, and debug it all. Then hand-translate it into asm.)
P.S. One of the smartest things Gates/Allen did to write their original BASIC was to write an 8080 emulator on a PDP-10(?). This enabled much, much faster development than trying to hand-assemble code and toggle it in.
I'm reminded of the story of the university student who wrote some super optimised and highly convoluted implementation of some algorithm by iteratively improving it in scheme and finally translating the final scheme code to C.
(How I'd do it is write all the semantic code in D, such as the code for EDLIN, and debug it all. Then hand-translate it into asm.)
P.S. One of the smartest things Gates/Allen did to write their original BASIC was to write an 8080 emulator on a PDP-10(?). This enabled much, much faster development than trying to hand-assemble code and toggle it in.