- Big difference in philosophy. CP/M is record-based, you work with big tables describing files. Dos 2.0 prefers streams, and it has much more lightweight, Unix-like file handles.
- Another Unix feature adopted is device files. There was no line printer or console file in DOS 1.0, if you wanted to do something unique with I/O you had to write a program for it. That along with pipes makes 2.0 much more nice to work with even 40 years later.
- Hierarchical directories and hard drives. The two go together, and the advantages should be obvious.
- Memory management. Dos 2.0 is the first to have equivalents of malloc, free, and realloc in its syscalls. This makes having Terminate and Stay Resident (TSR) programs much more feasible. The PRINT command is an example, it can run in the background.
If you bypassed DOS's memory allocation, your program would stomp on TSRs, or if it was a TSR then other programs would stomp on it, so either way it would be super unreliable.
The only thing I remember ever bypassing DOS for filesystem access was things like Norton DiskEdit, unerase utilities, and defraggers. Do you have examples in mind?
(Of course lots of programs didn't use standard output.)
I agree that without hard drives you didn't really need subdirectories. It's hard to fit more than a couple of screenfuls of files on a single floppy.
- Big difference in philosophy. CP/M is record-based, you work with big tables describing files. Dos 2.0 prefers streams, and it has much more lightweight, Unix-like file handles.
- Another Unix feature adopted is device files. There was no line printer or console file in DOS 1.0, if you wanted to do something unique with I/O you had to write a program for it. That along with pipes makes 2.0 much more nice to work with even 40 years later.
- Hierarchical directories and hard drives. The two go together, and the advantages should be obvious.
- Memory management. Dos 2.0 is the first to have equivalents of malloc, free, and realloc in its syscalls. This makes having Terminate and Stay Resident (TSR) programs much more feasible. The PRINT command is an example, it can run in the background.