What was MS-DOS? Historical arguments aplenty *spawn

BoardBonobo

My hat is white(ish)!
Veteran
Microsoft developed DOS from CP/M, Windows 2-3 (WIN16), Windows 95-98-XP-Vista-7-8 (WIN32), Windows NT (on x86, Solaris, DEC Alpha), PocketPC / HandheldPC (x86, MIPS, SH-3, ARM architectures) and developed applications on their own operating systems and other peoples. They are, without argument, the single most experienced operating system company in the world.

Not quite! They bought a BASIC language which they converted into the original DOS. CP/M was the dominant OS of the day, next to Unix anyway. It's the OS I learned to program under 380Z running CP/M.

Windows 95-98, ME, XP, VISTA, 7-8 - these were mostly MS's creations. The 2 direst of them ME and Vista were examples of what happened when MS tried to do things on its own without buying the tech to build them on first.

NT, 2000, Server - these were built on NT which they bought from a company called NT.
 
But expecting Sony to be as experienced in OS and application design as Microsoft is as unrealistic as expecting Microsoft to be as experienced in hardware design and manufacture as Sony.

Microsoft developed DOS from CP/M, Windows 2-3 (WIN16), Windows 95-98-XP-Vista-7-8 (WIN32), Windows NT (on x86, Solaris, DEC Alpha), PocketPC / HandheldPC (x86, MIPS, SH-3, ARM architectures) and developed applications on their own operating systems and other peoples. They are, without argument, the single most experienced operating system company in the world.

Not quite! They bought a BASIC language which they converted into the original DOS. CP/M was the dominant OS of the day, next to Unix anyway. It's the OS I learned to program under 380Z running CP/M.

Windows 95-98, ME, XP, VISTA, 7-8 - these were mostly MS's creations. The 2 direst of them ME and Vista were examples of what happened when MS tried to do things on its own without buying the tech to build them on first.

NT, 2000, Server - these were built on NT which they bought from a company called NT.

XP, Vista, 7 & 8 are NT's, not WIN32s, even if they integrated a lot from the WIN32-family into NT-family
 
Not quite! They bought a BASIC language which they converted into the original DOS.
And what I said was different, how... ?

Windows 95-98, ME, XP, VISTA, 7-8 - these were mostly MS's creations.
Yeah, kinda, not really. Microsoft bought in Dave Cutler, formally of DEC and VMS architect. NT's lineage is in VMS. If you've used both (as I have), you'll know this. We retired our last VMS system only a couple of years ago.
 
Not quite! They bought a BASIC language which they converted into the original DOS. CP/M was the dominant OS of the day, next to Unix anyway.

How do you convert a programming language to an operating system?

86-DOS was the name IIRC.

Yeah, but Sony has more experience doing games os.

TBF, 360 OS did more with less. Also, the fact that Sony has been using BSD based OS for two generations now says something.
 
How do you convert a programming language to an operating system?
Good catch, I overlooked this.

I thought by 'basic' he meant CP/M, which Microsoft licensed from Digital Research, and not the BASIC language. As far as I'm aware Microsoft's BASIC was an in-house development. If they bought that then that's a bit of trivia I didn't know or have long since forgotten.
 
Good catch, I overlooked this.

I thought by 'basic' he meant CP/M, which Microsoft licensed from Digital Research, and not the BASIC language. As far as I'm aware Microsoft's BASIC was an in-house development. If they bought that then that's a bit of trivia I didn't know or have long since forgotten.

Because the original DOS was just an interpreter that ran programs. You didn't write code for DOS, you just wrote programs that could be run from DOS or, more commonly, just nasty little .com programs. As long as the BIOS recognised it.

Ooh - and CP/M wasn't basic! It took MS years to catch up with it. DOS 3.11 was probably the closest but was still lacking a lot of CP/M's capabilities.

DSoup said:
Microsoft developed DOS from CP/M...

That bit is wrong. CP/M was completely removed from MS/DOS. The original was bought by MS and rebranded for IBM.
 
Because the original DOS was just an interpreter that ran programs. You didn't write code for DOS, you just wrote programs that could be run from DOS or, more commonly, just nasty little .com programs. As long as the BIOS recognised it.
If you're taking batch files (.BAT files) yes, otherwise no. DOS handled memory, I/O, interrupts, the file system. It was not an interpreted language :???:
 
If you're taking batch files (.BAT files) yes, otherwise no. DOS handled memory, I/O, interrupts, the file system. It was not an interpreted language :???:

Not the original! It had access to the BIOS interrupt table and used drivers like himem to access above the 640K. It wasn't until later that DOS extended the BIOS interrupt table and made nice things like the TSR available. That made writing viruses so easy in DOS Especially keycatchers... but I digress!

QDOS -> PC-DOS was at heart a BASIC interpreter that had some higher level commands built into it. The original DOS was pretty bad.
 
Not the original! It had access to the BIOS interrupt table and used drivers like himem to access above the 640K. It wasn't until later that DOS extended the BIOS interrupt table and made nice things like the TSR available.
So which operating system did DOS ran on?
 
Not the original! It had access to the BIOS interrupt table and used drivers like himem to access above the 640K.

...eh??????????????????????????????????????????

No, you are totally wrong.
DOS was a complete OS, and in 8088/86 times, you had NO himem, as it was available only since iAPX286 and its crazy A20 line bug/feature that allowed a soft reset.

DOS always offered his primary services through int21+sub codes, but it was offering them also on int25/26 and other INTs here and there.

Drivers in MS-DOS was also nice to do (contrary to TSR), having the 'strategy' and 'interrupt' part split... clever, for the period.

Really, this stuff on low level dos as interpreter cant really be read, guys...

OT: virus at old times was often hooking INTs for their job, which was very easy as no memory/IDT protection features was existing in real mode. Writing virus at those times was mostly assembly art, as the goal was to make it as smaller as possible, reusing asm binary etc etc.
 
...eh??????????????????????????????????????????

No, you are totally wrong.
DOS was a complete OS, and in 8088/86 times, you had NO himem, as it was available only since iAPX286 and its crazy A20 line bug/feature that allowed a soft reset.

DOS always offered his primary services through int21+sub codes, but it was offering them also on int25/26 and other INTs here and there.

Drivers in MS-DOS was also nice to do (contrary to TSR), having the 'strategy' and 'interrupt' part split... clever, for the period.

Really, this stuff on low level dos as interpreter cant really be read, guys...

OT: virus at old times was often hooking INTs for their job, which was very easy as no memory/IDT protection features was existing in real mode. Writing virus at those times was mostly assembly art, as the goal was to make it as smaller as possible, reusing asm binary etc etc.

It wasn't complete in the same way as we think of an OS being now. If you remember the boot sequence for DOS, BIOS first to MBR. MBR loads boot code and sets the IP. The boot code does its stuff, CRC etc. It then loads MSDOS.SYS into memory and with setup specific CP's and then handed control over to COMMAND.COM (ah! the nostalgia). If you wanted to run a program MSDOS would effectively unload itself so that the program can run. Once you've finished with Wordstar COMMAND.COM would be reloaded. The heart of the original MSDOS was just an interpreter. That's why the original no OS error message was 'Unable to load\run BIOS BASIC'.

It wasn't until MSDOS2.0 that any decent extensions to the Interrupts was created. In the original even a TSR wasn't guaranteed to work. With 2.0 they introduced the 64k page of 'protected' memory. At one time my programming bible was RBIL.

Coding in Borland Pascal with lots and lots of assembler. It hurts even thinking about it. Put your disk in with source - edit - hit compile - remove disk - put in Language disk - remove disk - put in source disk ... ad nauseam.

You're right about the Himem though. I forgot that it wasn't common until the 286 appeared.

But this is totally off the reserve so I'm going to stop dredging up painful memories :cry:
 
It wasn't complete in the same way as we think of an OS being now. If you remember the boot sequence for DOS, BIOS first to MBR. MBR loads boot code and sets the IP. The boot code does its stuff, CRC etc.

I don't even know how to begin to address what's wrong with this. BIOS is a HAL (Hardware Abstraction Layer). It performs the basic POST (Power On Self Test) of RAM, CPU and key I/O hardware on startup and then maps the hardware attached to any internal or external bus.

BIOS will then try working through the user set boot devices in order or priority looking for a bootable disk. MBR is the Master Boot Record (the first 512 bytes stored on the HDD) and is a standard for describing the partition layout and file systems on the disc. It can contain a small boot loader for something else, usually an operating system. MBR doesn't load this, BIOS does. CRC is Cyclic Redundancy Check, a method for checking the integrity of data transferred or saved/loaded.

I don't know what you mean by "set the IP" but you seem to be confusing the OS with COMMAND.COM which is a shell. If the OS unloaded, every DOS application would need to understand the filesystem to do basic file I/O.

There is an overview of how DOS developed from CP/M, and competed with it, here
 
The way I always heard it was IBM was trying to license BASIC from Microsoft and CP/M from those guys for their new line of personal computers. But the CP/M guys balked for some reason so Gates told IBM they could do the OS too. To that end they very quickly reverse engineered CP/M to create QDOS (which stood for Quick and Dirty Operating System). IBM licensed it, it was renamed MS-DOS and the rest is history.
 
The way I always heard it was IBM was trying to license BASIC from Microsoft and CP/M from those guys for their new line of personal computers. But the CP/M guys balked for some reason so Gates told IBM they could do the OS too. To that end they very quickly reverse engineered CP/M to create QDOS (which stood for Quick and Dirty Operating System). IBM licensed it, it was renamed MS-DOS and the rest is history.
QDOs wasnt done by Microsoft, it wasnt reverse engineered from CP/M either.
MS bought QDOS from Tim Patterson.

And from what I remember reading (dont know the source right now), there were some personal issues with CP/M people that kept IBM from using that OS. Something like never responding to telephone calls.... cant remember now.
I know they dint use the m68k chips because they already had a license for intel even though the engineers wouldve prefered it. Couldve been a entirely different market had IBM chosen differently.
 
Last edited by a moderator:
I don't even know how to begin to address what's wrong with this.

Nothings wrong with it. You're just trying to understand something you never experienced based on modern definitions and procedures. A lot of what you take for granted now just didn't happen then.

BIOS is a HAL (Hardware Abstraction Layer). It performs the basic POST (Power On Self Test) of RAM, CPU and key I/O hardware on startup and then maps the hardware attached to any internal or external bus.

BIOS will then try working through the user set boot devices in order or priority looking for a bootable disk. MBR is the Master Boot Record (the first 512 bytes stored on the HDD) and is a standard for describing the partition layout and file systems on the disc. It can contain a small boot loader for something else, usually an operating system. MBR doesn't load this, BIOS does. CRC is Cyclic Redundancy Check, a method for checking the integrity of data transferred or saved/loaded.

I don't know what you mean by "set the IP" but you seem to be confusing the OS with COMMAND.COM which is a shell. If the OS unloaded, every DOS application would need to understand the filesystem to do basic file I/O.

There is an overview of how DOS developed from CP/M, and competed with it, here

No the OS was contained in IO.SYS and MSDOS.SYS. They were just a bunch of libraries some of which were hot loaded to specific areas of memory. The equivalent of what became TSR's. A set of BIOS interrupts were then set to point to various areas of this memory. COMMAND.COM was the interpreter that did the basic commands (it was based on a BASIC interpreter). All of this was unloaded in order to run a program. Only one program at a time could run unlike in CP/M which already had time slicing implemented at this point.

All "OS" commands were either BIOS interrupts or modified versions of them. We used to call them blobs but vectors is probably more appropriate. Look up RBIL - here's a link - there were no OS calls to fancy functions to handle the file system or anything like that. It was all done through the BIOS. You could even choose whether to use MFM or GCR for encoding disks etc. Bare in mind though that HDDs weren't always SCSI or PATA but could be RLL or many diverse flavours. Not that MS-DOS was ever really sophisticated enough to handle all these. Maybe the very last editions would have been but everything had settled into a mundane set of standards by then.

MS-DOS had nothing to do with CP/M at all :/ CP/M was a vastly superior OS that had a lot of advanced features, some of which the PC wouldn't see until Win98. The multi-user multi-tasking features that Unix or CP/M (and others) wouldn't hit the PC until Win2000 (based on the NT kernel). In many ways the development of the PC was set back years by the adoption of MS-DOS. Which only came about because of bad business decisions and peoples ego's. If it had been CP/M based for instance we would have been using a multi-tasking OS with a GUI that worked long before Win3.

It's hard to explain just how basic it all was back then. I'll try and dig up some old code (we created a paint package for EGA based machines, back in day, that used scan line tricks inspired by the amiga to make copper bars and other things).
 
Last edited by a moderator:
Nothings wrong with it. You're just trying to understand something you never experienced based on modern definitions and procedures. A lot of what you take for granted now just didn't happen then.
Look dude, the first hardware I programmed professionally was a DEC PDP-11 which was 16-bit system developed in the 70s. Please don't use the 'you're too use' thing on me.

They were just a bunch of libraries some of which were hot loaded to specific areas of memory.
The early operating systems were just groups of libraries and a standard disk file system. That's what MS-DOS was.

The equivalent of what became TSR's. A set of BIOS interrupts were then set to point to various areas of this memory.
TSR (Terminate and Stay Resident) was an technique to introduce some functionality common to multitasking operating systems to the single-tasking operating like DOS. This doesn't define an OS.

COMMAND.COM was the interpreter that did the basic commands (it was based on a BASIC interpreter).
COMMAND.COM was the standard MS-DOS shell. Like bash and csh. It's not the OS, it's an interface to the OS and let's you run programs on the OS. Most shells have inbuilt commands as COMMAND.COM did.

All of this was unloaded in order to run a program. Only one program at a time could run unlike in CP/M which already had time slicing implemented at this point.
Not it doesn't. COMMAND.COM stays in memory at all times, unless you replace it with something else entirely. The shell has to be resident in order to run batch files, pass arguments to programs and get error codes from programs.

All "OS" commands were either BIOS interrupts or modified versions of them.

Which is all the architecture really supported in the days of 8088 and 8086.

MS-DOS had nothing to do with CP/M at all :/ CP/M was a vastly superior OS that had a lot of advanced features, some of which the PC wouldn't see until Win98.

DOS was derived from a clone of CP/M, 86-DOS. Written by Tim Patterson. Not a complete replacement, but it didn't need to be.

It's hard to explain just how basic it all was back then.
Not it isn't. I had the original wood-effect Atari VCS, my first home computer was a Commodore 64. I know how it was. My first real program for the 64 was an assembler written in BASIC. It didn't support of 6510 opt codes, it didn't need too.
 
Look dude, the first hardware I programmed professionally was a DEC PDP-11 which was 16-bit system developed in the 70s. Please don't use the 'you're too use' thing on me.

Never did like the PDP. Apart from the Grue.


The early operating systems were just groups of libraries and a standard disk file system. That's what MS-DOS was.

TSR (Terminate and Stay Resident) was an technique to introduce some functionality common to multitasking operating systems to the single-tasking operating like DOS. This doesn't define an OS.

Which is what I said. Apart from TSR's didn't work properly until V2.0. This was when the 64k page was introduced.

COMMAND.COM was the standard MS-DOS shell. Like bash and csh. It's not the OS, it's an interface to the OS and let's you run programs on the OS. Most shells have inbuilt commands as COMMAND.COM did.

Not it doesn't. COMMAND.COM stays in memory at all times, unless you replace it with something else entirely. The shell has to be resident in order to run batch files, pass arguments to programs and get error codes from programs.

Nope. It was unloaded at the start of program execution and reloaded after completion. There wasn't enough memory to do both and there was no guarantee that the memory would have been safe. There was a lot of disk swapping involved. It wasn't until the introduction of Himem and the ability to use ramdisk that you could do the equivalent of hold the OS in memory for quick reloads.

All the OS style stuff was done through interrupts.

Which is all the architecture really supported in the days of 8088 and 8086.

And until Win95 that was practically all that MS used.

DOS was derived from a clone of CP/M, 86-DOS. Written by Tim Patterson. Not a complete replacement, but it didn't need to be.

Nope. It had nothing to do with CP/M. He may have loosely based some ideas on functions that CP/M used but other than that they were very separate and different OS's

Not it isn't. I had the original wood-effect Atari VCS, my first home computer was a Commodore 64. I know how it was. My first real program for the 64 was an assembler written in BASIC. It didn't support of 6510 opt codes, it didn't need too.

I've still got one knocking around somewhere. I'm trying to remember what my first program was. I think it was an assembler patch to let the Commoder PET utilise the CPU in the external FD as it was substantially faster than the one in the PET itself.
 
Which is what I said. Apart from TSR's didn't work properly until V2.0.
Irrelevant to MS-DOS being an OS.

Nope. It was unloaded at the start of program execution and reloaded after completion.
Microsoft strongly disagree:

The transient portion of COMMAND.COM remains in conventional memory whether MS-DOS is loaded high or low. Most of the COMMAND.COM resident portion, any software code pages, and the disk buffers (usually) also load high if DOS=HIGH is in the CONFIG.SYS file.

And until Win95 that was practically all that MS used.
If you ignore the i286 and i386. Let's pretend they and the enhanced memory modes they offered didn't exist and that MS-DOS was completely unable to benefit from the new memory modes.

Nope. It had nothing to do with CP/M. He may have loosely based some ideas on functions that CP/M used but other than that they were very separate and different OS's
Never said otherwise. But it's clear that MS-DOS was based on CP/M. Hell, from Wikipedia:
Many of the basic concepts and internal mechanisms of early versions of MS-DOS resembled those of CP/M. Internals like file-handling data structures were identical, and both referred to disk drives with a letter (A:, B:, etc.).

I.e., it was a knock-off off CP/M.
 
Irrelevant to MS-DOS being an OS.

In a very limited form. Especially the iteration we're talking about!

Microsoft strongly disagree:

The transient portion of COMMAND.COM remains in conventional memory whether MS-DOS is loaded high or low. Most of the COMMAND.COM resident portion, any software code pages, and the disk buffers (usually) also load high if DOS=HIGH is in the CONFIG.SYS file.

But Himem wasn't available until the i286 (possibly there was a i186 that supported it). And that was long after the version of DOS we're talking about was replaced. It was all unloaded to run programs. You didn't have access to anything like the Ramdisk etc. What remained in memory were a few functions that replaced BIOS interrupts. And the CP for various bits and pieces.

So Kb article is obviously referring to a version of DOS >2. Probably 5.0.

If you ignore the i286 and i386. Let's pretend they and the enhanced memory modes they offered didn't exist and that MS-DOS was completely unable to benefit from the new memory modes.

It was i386 that introduced the MMU. The i286 had a bug that allowed paged memory to be effectively cut off from write access without requiring a reboot.

Never said otherwise. But it's clear that MS-DOS was based on CP/M. Hell, from Wikipedia:
Many of the basic concepts and internal mechanisms of early versions of MS-DOS resembled those of CP/M. Internals like file-handling data structures were identical, and both referred to disk drives with a letter (A:, B:, etc.).

I.e., it was a knock-off off CP/M.

It was an poor imitation with 99% of the functionality removed. As the article says, they 'resembled' CP/M. In the same way that a Ford Focus resembles a Bugatti Veyron!
 
In a very limited form. Especially the iteration we're talking about!
I'm happy with the definition of OS as the resident foundation software layer for applications for a system. MS-DOS fits this definition. You're original definition was a BASIC-like interpreted language. I don't know what fits that.

But Himem wasn't available until the i286 (possibly there was a i186 that supported it). And that was long after the version of DOS we're talking about was replaced.

The article has been updated with time. Look at it from an engineering point of view. If COMMAND.COM was not resident, calling, and receiving output from the last terminating program, how exactly did batch files work? How did any MS-DOS program terminate? What state data was passed too? It was the shell because part of the shell was always resident. It was the also the interface for users and the bridge between commands, whether run in immediate or batch modes.

It was i386 that introduced the MMU. The i286 had a bug that allowed paged memory to be effectively cut off from write access without requiring a reboot.
And Bill Gate was most uncomplimentary about the i286 describing it as "brain dead", but that didn't stop bespoke extended memory managers appearing for 286 and much more widely for the i386 which appeared in 1985 whereas you said:

And until Win95 that was practically all that MS used [8088 and 8086].
I don't know who wrote those EMM386 managers :???:

It was an poor imitation with 99% of the functionality removed.
I never said it was a clone or compatible, just that it was the genus for MS-DOS.
 
Back
Top