Na první pohles se CPM86 a DOS podobají, ale na druhý už ne. CP/M je "tvrdý" operační systém s textovým výstupem, nezávislý na klávesnicovém a zobrazovací hardware. Měl vlastní správu paměti, která přidělovala segmenty. Jeden programový modul ( funkce, subrutina ) dostal přidělen vždy určitý segment. Nebyla tam žádná možnost v programu měnit segmentové registry, to dělal OS. Každé volání podprogramu se dělo přes OS. Překladač nepodporovali ani přímé přístupy na segment registry a do videopaměti.
"Rychlost" QDOSu byla právě v běhu programu takřka bez volání služeb OS a "špinavost" byla v možnosti nastavovat segmenty a v plném přístupu k hardware. Tam se objevil poprvé i formát EXE programu, který při spuštění spočítal a naplnil segmenty podle absolutního umístění.
DOS se prosadil hlavně diky tomu. V "jednoplatformním" HW prostředí nikdo žádný sofistikovaný OS nepotřeboval. Ctělo to OS, který prostě jen zavedl program do paměti a spustil. Program stejně běžel přímo nad Hardwarem.
To by mne docela zajimalo, jak by CP/M 86 (kod x86) bezel na uplne jinem CPU Motorola 68k. A nejen binarni kod. Ty procesory nejsou kompatibilni ani na urovni symbolickych ASM instrukci, registru CPU a adresovani vetsi pameti. 68000 byla od pocatku navržena na 32bitové registry a adresové prostory (adresy se vždy ukládaly jako 32 bitové). :-D
Spis jste chtel rict, ze mela pouzivat CP/M. Stejne tak jak bylo CP/M portovano na x86, tak se muze (a mozna k tomu doslo) portovat na M68k, neni duvod mu rikat CP/M 86. Nebo mate informaci, ze na Motorolu chteli portovat ten portovany CP/M 86 ?
Ostatne, pokud si pamatuji, CP/M bylo bezne na upravenem Sinclair (Z80).
O volání podprogramů přes OS mi není nic známo. Ale - při vší úctě - ze srovnání MS-DOS vs. CP/M-86 nemůže MS-DOS po technologické stránce vyjít jinak, než jako hodně slaboučký odvar.
Pro zájemce:
http://bitsavers.org/pdf/digitalResearch/concurrent/Concurrent_CPM-86_Programmers_Guide_Sep82.pdf
O programování pod cp/m86 mi kdysi hodně dávno, hodně nadšeně povídal jeden známej. Možná to bylo asemblerem, ale co si pamatuji tak tam jeden LNK soubor mohl mít max 64 kb a další LNK soubory knihoven také max 64 kb.
Po slinkování se pak odkazy na knihovny z jiných LNK souborů volali přes OS přes nějaký RST. A jen ten nastavoval segmenty. Assembler dlouhé odkazy vůbec nebral. Pak tam ještě byly lokální a globální datové bloky. Programy tam běželi i paralelně. Paralelní verze se jmenovala myslím Concurent CP/M86. Na obrazovce se přepínala virtuální terminálová okna. Výhodou bylo, že ty programi běhali na 8086 i na 80286 v reálu i ve standartu ( tam navíc s ochranou paměti ). CP/M verze pro 80286 běhala ve standartu.
U 368 se systém přejmenoval na Concurent DOS a mohl spouštět i úlohy DOSu v V86 režimu ( "nereálný" soft pro Dos tam nechodil )