CP/M

**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.

## 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:

Externé príkazy dostupné v CP/M ako samostatne zavádzané programy:

### 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):

#### 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.

Jeden zo spôsobov, ako zabezpečiť pamäť RAM od adresy 0000h, je navrhnúť počítač tak, aby obsahoval v celom adresnom priestore pamäť RAM. Pretože však taký počítač sám o sebe nie je možné spustiť, je nutná buď prepínateľná banka pamäte od 0000h (implicitne po resete namapovaná ROM, neskôr softvérovo nahradená RAM bankou) alebo po spustení počítača dočasne odpojiť procesor od zbernice a operačný systém CP/M nahrať do pamäte z vonkajšieho pamäťového média prostredníctvom pomocného procesora.

## Hardvérové architektúry
[náhľad|CP/M rozširujúca karta od Digital Research, obsahujúca procesor [Zilog Z80|Z80, 64 KiB RAM a nevyhnutnú logiku. Umožňovala beh CP/M softvéru na počítačoch Apple II s nekompatibilným procesorom MOS Technology 6502.]]
Existovalo niekoľko vzájomne nekompatibilných architektúr počítačov (ZX Spectrum, Sharp, Atari, Amstrad-Schneider), kedy každá architektúra mala inak ovládaný hardvér (klávesnica, joysticky, videopamäť), inú organizáciu pamäte (umiestnenie pamäte RAM a ROM v adresovom priestore procesora, pripájanie pamäte väčšieho rozsahu než je adresový priestor procesora a pod.) a nekompatibilné periférie. Nekompatibilita periférií nebola len medzi rôznymi architektúrami, ale aj v rámci jednej architektúry. Napr. pre počítače ZX Spectrum existovalo viacero rôznych disketových systémov (Beta Disk Interface, Disciple, +D, Opus Discovery, Wafadrive, systém použitý v počítačoch ZX Spectrum +3, Didaktik 40/80, Dataputer, Timex FDD3000, Kempston Disc Interface, Byte Drive 500 a ďalšie). Operačný systém CP/M potom umožňoval písať programy použiteľné na rôznych architektúrach a v spojení s rôznymi perifériami.

Samozrejme existovali aj iné procesory, napr. MOS Technology 6510 použitý v Commodore 64. Pre tieto procesory operačný systém CP/M neexistoval, preto Commodore 128 obsahoval dva procesory: MOS Technology 8502 (novšia verzia 6510, pre režimy C64 a C128) a Zilog Z80 (pre režim CP/M). Pre počítače Apple II, založené na procesore MOS Technology 6502, existovala špeciálna karta pre prevádzku operačného systému CP/M s procesorom Zilog Z80.

## Pamäťové médiá
CP/M dokázal obslúžiť až 16 pripojených externých pamäťových jednotiek (disketové jednotky, pevné disky, RAM disky). Jednotky boli označené písmenami A: až P:. Médiá mali len koreňový adresár. Aby bola možná určitá štruktúrovanosť ukladaných údajov, bolo možné súbory ukladať pod číslami používateľov 015 (akoby na jednom médiu existovalo 16 koreňových adresárov a v každom boli uložené iné súbory). Bolo možné používať médiá až do veľkosti 32 MiB, pričom veľkosť súboru mohla byť až 16 MiB (verzia CP/M pre ZX Spectrum +3 mohla používať médiá až do veľkosti 16 MiB, pričom veľkosť súboru mohla byť až 8 MiB), čo v tom čase znamenalo ešte dostatočnú rezervu, keďže kapacita diskiet bola obvykle 360 alebo 720 KiB (dvojitá hustota, *Double Density*, DD), resp. 1,2 alebo 1,4 MiB pri použití záznamu s vysokou hustotou (*High Density*, HD). Existovala aj verzia CP/M pracujúca so ZX Microdrive.

## Aplikácie
náhľad|WordStar 4 pre CP/M na 5¼" disketách
Medzi známe aplikačné programy, vyvinuté pre CP/M, patria napr.:
* WordStar – jeden z prvých textových procesorov pre mikropočítače
* VisiCalc, SuperCalc a Multiplan – tabuľkové procesory
* dBase – populárny databázový program
* AutoCAD – CAD aplikácia od spoločnosti Autodesk
* viacero interpreterov a prekladačov dobovo rozšírených programovacích jazykov ako napr. COBOL, Fortran, BASIC, Turbo Pascal alebo C
* viacero hier, prevažne textovo orientovaných (Adventure, Star Trek, Zork), prípadne s ASCII pseudografikou (Aliens, CatChum, Ladder, Star Trader)
 
## Referencie

## Literatúra
* 
* 
* 
* 
* 
* 
* 
* 

## Iné projekty

## Externé odkazy
* Oficiálna stránka CP/M na webe Digital Research
* CP/M Main Page
* CP/M Internals na webe Obsolescence Guaranteed
* The Unofficial CP/M Web site (vrátane zdrojových kódov)
* Uvoľnený zdrojový kód CP/M
* ASM80 – online krížový assembler a IDE pre 8080, 8085, Z80 a 6502, vrátane emulátora CP/M
* Z88DK – krížový prekladač jazyka C pre množstvo platforiem založených na 8080, 8085 a Z80, vrátane CP/M

## Zdroj


Kategória:Operačné systémy
Kategória:Dejiny počítačov
Kategória:Vzniklo v 1974