CP/M (z , neskôr ; v ČSSR a Poľsku klon CP/M 2.2 Mikros) bol dominantný jednopoužívateľský a jednoúlohový operačný systém, vytvorený pôvodne pre mikropočítače s 8-bitovými mikroprocesormi Intel 8080. Vyvinul ho v roku 1974 Gary Kildall, zakladateľ spoločnosti Digital Research, v tom čase pracujúci ako konzultant pre Intel. Neskôr vznikli aj jeho rozšírenia pre viac ako 64 kilobajtov pamäte, viacpoužívateľské varianty aj varianty pre 16-bitové procesory.

Systém CP/M a počítače so zbernicou S-100 vyvinuté po vzore počítača Altair 8800 predstavovali raný priemyselný štandard mikropočítačov a táto platforma bola od konca 70. rokov do polovice 80. rokov 20. storočia dodávaná rôznymi výrobcami mikropočítačov. Po neúspechu úvodných rokovaní IBM s Digital Research ohľadom nasadenia CP/M-86 pre pripravované IBM PC a vysokej cene ho v priebehu 80. rokov postupne nahradil systém MS-DOS, ktorý prevzal niektoré jeho črty.CP/M. In:

Dejiny náhľad|CP/M 2.2 z roku 1982 bežiaci na počítači Sanco 8001 (CPU Z80, 64 KiB RAM, 4 KiB ROM) náhľad|CP/M-86 1.1 z roku 1983 pre počítače IBM PC

Autorom CP/M bol Gary Kildall (* 1942† 1994), ktorý začal systém vytvárať ako konzultant pre spoločnosť Intel. Základ systému vznikal súbežne so zavádzaním výroby mikroprocesora Intel 8080 (1974), odstraňujúceho niektoré obmedzenia staršieho Intel 8008 (zásobník mapovaný do operačnej pamäte nahradil plytký hardvérový zásobník, 16-bitový adresový priestor namiesto 14b umožnil priamo adresovať 64 KiB pamäte). 8080 bol jedným z prvých mikroprocesorov vhodných pre konštrukciu viacúčelových mikropočítačov, ktorých segment po jeho uvedení čakal obrovský rozmach. Intel samotný adaptoval pre 8080 svoj existujúci komerčný mikropočítač Intellec 8, pre ktorý Kildall CP/M vyvíjal.

Po nezhodách s Intelom pokračoval Kildall vo vývoji CP/M ďalej na vlastnú päsť. Prototyp systému schopný pracovať s radičom disketových jednotiek Digital Systems vzbudil pozitívny ohlas. Pretože ale medzitým rýchlo vznikalo množstvo rozličných mikropočítačových zostáv, rozdelil Kildall systém na časť technicky nezávislú a časť technicky závislú, ktorú ako jedinú bolo potrebné prispôsobiť hardvéru konkrétnej mikropočítačovej zostavy. Toto rozdelenie, umožňujúce rýchlu a efektívnu adaptáciu systému na nový hardvér označil Kildall za tajomstvo úspechu CP/M. Prvá zverejnená verzia systému CP/M bola verzia 1.3 (1976), verzia 1.4 (1978) už dokázala pracovať s radičom disketových jednotiek IBM.

Verzia 2.2 (1979) potom v technicky závislej časti obsahovala tabuľky vlastností pevných diskov. Táto verzia bola najrozšírenejšou verziou v bývalom Česko-Slovensku, známa pod označením Mikros. Varianty Mikrosu existovali napr. pre viaceré mikropočítače SMEP z VÚVT Žilina (SM 50/40, PP 03, 05, 06), SAPI 1, IQ 151, TNS, PMD 85 a jeho klony alebo východonemecký Robotron 1715.

Verzia 3.1 obsahovala podporu pre prepínanie bánk pamäte (bank switching). Okrem štandardného variantu CP/M existovali aj varianty umožňujúce spúšťanie viacerých úloh (Concurrent CP/M), CP/M s možnosťou prístupu viacerých používateľov súčasne (MP/M) a variant umožňujúci využitie zdieľaných sieťových prostriedkov (CP/NET).

Minimálne technické vybavenie Minimálne požiadavky systému CP/M na hardvérové vybavenie boli nasledovné:

mikroprocesor Intel 8080 (8085) alebo Zilog Z80 najmenej 16 kilobajtov pamäte RAM začínajúcej od adresy 0 aspoň jedna disketová jednotka možnosť zavedenia OS z prvého sektoru diskety terminál používajúci znakovú sadu ASCII

Originálny systém CP/M, ktorý predávala firma Digital Research používal mikroprocesor Intel 8080. Výrobcovia systémov kompatibilných s CP/M upravovali časti systému pre svoje vlastné kombinácie pamäte, diskových jednotiek, a terminálov. CP/M tiež bežal na systémoch s mikroprocesorom Zilog Z80, pretože inštrukčný súbor Z80 je rozšírením inštrukčného súboru 8080. Kým systém od Digital Research používal iba inštrukcie pre 8080, mnoho systémov pre Z80 používalo inštrukcie pre Z80, takže tieto programy na počítačoch s procesormi Intel nefungovali.

CP/M používal 7-bitovú znakovú sadu ASCII. Použitie kódov 128255 nebolo štandardizované. Počítače Osborne ich používali pre podčiarknuté znaky, počítače Kaypro pre grécke znaky. Medzinárodné systémy CP/M obvykle používali normu ISO 646 pre lokalizované národné znakové sady, ktoré namiesto použitia kódov 128255 nahrádzajú niektoré ASCII znaky národnými znakmi.

Štruktúra operačného systému náhľad|Reklama na CP/M v časopise InfoWorld v decembri 1978 náhľad|Reklama na GSX, GSS-KERNEL a GSS-PLOT – grafické knižnice pre CP/M, umožňujúce grafický výstup abstrahujúci od konkrétneho hardvéru (InfoWorld, november 1982)

Operačný systém CP/M sa skladá z troch základných súčastí:

Basic Input/Output System – BIOS Basic Disk Operating System – BDOS Console Command Processor – CCP

BIOS a BDOS boli rezidentné – trvalo zavedené do pamäte, zatiaľ čo CCP mohol byť prepísaný spúšťaným programom. Pokiaľ k tomu došlo, bol CCP po ukončení programu znovu načítaný z disku. Systém bol dodávaný aj s niekoľkými pomocnými programami, ktoré boli uložené ako súbory s príponou .COM na disku.

Basic Input/Output System Modul BIOS obsahoval podprogramy pre obsluhu vstupných a výstupných zariadení, ako napríklad funkcie pre čítanie znaku z klávesnice, výpis znaku na obrazovku, čítanie sektora z diskety a zápis sektora na disketu. Táto časť bola závislá na technickom vybavení konkrétneho typu počítača.

Basic Disk Operating System Modul BDOS implementoval systém súborov a abstrakcie pre vstupné a výstupné operácie s využitím funkcií poskytovaných modulom BIOS. BDOS, CCP a štandardné príkazy boli (v ideálnom prípade) nezávislé na technickom vybavení. Pre obmedzené adresovacie možnosti použitých procesorov však bolo nutné preinštalovať systém pri zmene veľkosti operačnej pamäte. Nainštalovaný systém (BIOS, BDOS a CCP) bol uložený vo vyhradených oblastiach na systémovom disku, odkiaľ ho po zapnutí počítača zavádzač systému (spravidla uložený v pamäti ROM) načítal z diskety v prvej mechanike.

V porovnaní s modernými operačnými systémami bol CP/M veľmi primitívny, najmä kvôli veľmi obmedzenému rozsahu operačnej pamäte. Vo verzii 1.0 nevedel detegovať, že používateľ vymenil disketu, takže mohlo ľahko dôjsť k prepísaniu dát na diskete. Vo verzii 1.1 a 1.2 spôsobil pokus o zápis na vymenenú disketu kritickú chybu a bolo nutné reštartovať systém, takže došlo k strate dát, ktoré chcel používateľ uložiť.

Najzložitejšia časť CP/M bola izolovaná v BDOS, a v menšej miere v CCP a jednotlivých príkazoch. Pri adaptácii systému na nový hardvér stačilo prepísať (reimplementovať) len relatívne jednoduché hardvérovo závislé funkcie v BIOSe, čo významne skracovalo dobu trvania adaptácie a prispelo k veľkému rozšíreniu systému.

Console Command Processor Console Command Processor (CCP) slúži ako interpreter príkazov (shell) a poskytuje používateľské rozhranie systému – príkazový riadok. Zobrazuje písmeno aktuálnej diskovej jednotky a znak „väčší ako“ (napríklad A>) ako výzvu systému, načítava príkazy zadávané používateľom na klávesnici, buď ich priamo vykonáva alebo na ich vykonanie spustí dočasne zavedený program a zobrazuje výsledky na termináli. Ako terminál sa používal buď elektrický písací stroj alebo obrazovkový displej.

Interné príkazy vykonávané priamo programom CCP: Príkaz Použitie A: zmení aktuálnu diskovú jednotku ERA vymaže súbor DIR vypíše obsah adresára REN premenuje súbor SAVE uloží zadaný počet stránok (256 bajtov) pamäte od adresy 0100h do súboru TYPE vypíše obsah súboru na obrazovku

Externé príkazy dostupné v CP/M ako samostatne zavádzané programy: Príkaz Použitie ASM preloží program v jazyku symbolických inštrukcií do strojového kódu DDT spustí ladiaci program (debugger) DUMP vypíše obsah súboru v hexadecimálnom formáte ED textový editor LOAD načíta súbor vo formáte kódu počítača HEX a vytvorí spustiteľný súbor, ktorý možno načítať do pamäte MOVCPM prispôsobí systém CP/M pre konkrétnu veľkosť operačnej pamäte PIP kopíruje súbory medzi diskami a zariadeniami (Peripheral Interchange Program) STAT zobrazí voľné miesto (v bajtoch) na aktuálnom disku, poskytuje štatistické informácie o súboroch a zobrazí alebo zmení pridelenie zariadení SUBMIT spustí dávkový súbor SYSGEN vytvorí zavádzací disk systému CP/M

Súborový systém Každá disková jednotka bola identifikovaná písmenom a dvojbodkou (A:, B:, atď.).

CP/M nepodporoval podadresáre. Názvy súborov mohli mať maximálne 8 znakov nasledovaných bodkou a max. 3 znaky prípony. Prípona sa používala pre určenie typu súboru. Programy mali príponu .COM a textové súbory .TXT. Plný názov súboru mohol byť napríklad A:CCP.COM alebo A:README00.TXT. Tento formát bol bez zmeny prevzatý do operačného systému MS-DOS resp. PC-DOS. Vo verzii MS-DOS/PC-DOS 2.0 bol potom doplnený podporou adresárov.

Veľkosť súboru bola udržiavaná ako počet 128-bajtových záznamov (zodpovedajúcich veľkosti sektorov na osempalcových disketách). Neexistencia presnej dĺžky súborov v bajtoch sa obchádzala v textových súboroch použitím znaku konca súboru (ASCII SUB, hexadecimálne 1A, Control-Z). Pomocou + bolo možné docieliť aj skrátenie súboru.

Udržiavanie časov modifikácie súboru bolo podporované len v niektorých neskorších variantoch CP/M.

Chýbajúcu adresárovú štruktúru obchádzala CP/M verzia 2.2 pomocou až 16 používateľských oblastí na disku. Pre prepínanie medzi používateľmi slúžil príkaz USER x, kde x je číslo 0 až 15.

Organizácia pamäte Rozdelenie operačnej pamäte na typickom CP/M systéme so 64 KiB RAM (reálne veľkosti rezidentných modulov BIOS a BDOS sa môžu mierne líšiť podľa platformy a verzie CP/M): 0000h SPA komunikačná zóna (256 B) 0100h TPA zóna programov (56,75 KiB) CCP E400h BDOS rezidentná zóna (7 KiB) F200h BIOS FFFFh

System Parameter Area Oblasť prvých 256 bajtov pamäte od adresy 0000h sa nazývala System Parameter Area (SPA) a bola vyhradená na údajové štruktúry pre komunikáciu medzi operačným systémom a aplikačným programom, stavové údaje a vyrovnávaciu pamäť (buffer).

Transient Program Area Oblasť pamäte od adresy 256 (hexadecimálne 0100h) a začiatkom modulu BDOS sa nazývala Transient Program Area (TPA) a používa sa pre zavádzanie aplikačných programov. Procesory Z80 a 8080 môžu adresovať 64 kilobajtov pamäte, nie na všetkých počítačoch však bola pamäť tejto veľkosti k dispozícii. Niektoré počítače tiež majú v adresovom priestore ďalšie pamäte ako BIOS ROM, alebo videopamäť. V dôsledku toho mali rôzne počítače rôzne veľkú oblasť TPA. Niektoré neskoršie počítače mali viac ako 64 KiB operačnej pamäte a používali techniku prepínania bánk pamäte (bank switching). CP/M 3.0 umožňoval, aby v prepínanej časti pamäte boli aj niektoré časti BDOSu.

Požiadavky operačného systému náhľad|Prenosný Epson PX-8 z roku 1984 s CP/M 2.2 a mikrokazetovou mechanikou ako permanentným úložiskom údajov. Mimo nej bol ako disková jednotka mapovaný RAM disk s konfigurovateľnou veľkosťou a ROM/RAM disky zásuvných modulov.

Operačný systém CP/M vyžadoval pamäť RAM už od adresy 0000h. Počítače, ktoré neboli navrhované na spúšťanie operačného systému CP/M mali väčšinou v týchto miestach pamäť ROM a boli tak nutné úpravy. Pre textový výstup bolo požadovaných 80 znakov na riadok. Pri počítačoch, ktoré mali štandardne len 40 znakov na riadok, sa toto riešilo vlastnými ovládačmi umožňujúcimi zobrazovať písmo s polovičnou šírkou znakov. Špecifické riešenie bolo použité pri CP/M pre ZX Spectrum +3. Keďže počítače ZX Spectrum podporovali nanajvýš 51 znakov na riadok (monochromaticky; farebne len 32), riešilo sa zobrazovanie 80 znakov simulovaným 80-znakovým režimom s dvoma prekrývajúcimi sa 51-znakovými pohľadmi (+3 disponoval dvoma prepínateľnými videopamäťami). Keďže toto riešenie obmedzovalo čítanie súvislého textu, nebolo aktivované automaticky, ale pomocou príkazu. Klávesmi potom bolo možné prepínať medzi časťami obrazovky.