**CP/M** (lyhenne nimestä **Control Program/Monitor** ja myöhemmin **Control Program for Microcomputers**) on Digital Researchin Gary Kildallin kehittämä käyttöjärjestelmä, joka oli "teollisuusstandardi" 1970-luvun loppupuolelta 1980-luvun lopulle.

Kehitys
-------

Kildall kehitti CP/M:n vuonna 1974 kehittämällään korkeamman tason PL/M-kielellä Intellec-8-tietokoneelle. Kaupallisena käyttöjärjestelmänä se oli saatavilla vuonna 1976. CP/M oli dominoiva markkinoilla IBM PC:n julkaisuun saakka.

Käyttöjärjestelmässä on piirteitä Digital Equipment Corporationin PDP-10:ssä käytetystä TOPS-10 -käyttöjärjestelmästä.

Vuonna 1981 käyttöjärjestelmää käytettiin yli 3 000:lla laitteistokonfiguraatiolla ja se tuotti Digital Researchille tuloja 6 miljoonaa Yhdysvaltain dollaria.
IBM otti yhteyttä Kildalliin, jonka CP/M oli tuohon aikanaan menestyneimpiä käyttöjärjestelmiä. CP/M myi yli 600 000 kappaletta. Neuvottelut CP/M:n lisensoimiseksi tulevaan IBM PC -tietokoneeseen kuitenkin kariutuivat ja IBM hankki käyttöjärjestelmän Microsoftilta.

Microsoft osti Seattle Computer Productsilta (SCP) QDOSin, jonka ohjelmointirajapinta oli kopioitu CP/M:stä. QDOSin yhtenä kriteerinä oli tukea CP/M:lle tehtyjä ohjelmia.
Microsoft lisäsi QDOSiin CP/M:n piirteitä, jotka tekivät siitä enemmän CP/M:n kaltaisen ja se julkaistiin PC-DOS- (IBM PC:n mukana) sekä MS-DOS-nimellä.

PL/M
----

PL/M (*Programming Language for Microcomputers*) oli Kildallin vuonna 1972 kehittämä ohjelmointikieli, joka perustui IBM:n PL/I-kieleen. Kildall tarjosi vuonna 1974 CP/M:ää Intelille, joka ei ollut siitä kiinnostunut mutta osti PL/M:n.

Rakenne
-------

8-bittinen CP/M-käyttöjärjestelmä koostuu kolmesta osasta:

* komentotulkki CCP, *Console Command Processor*
* levykäyttöjärjestelmä BDOS, *Basic Disc Operating System*
* syöttö- ja tulostusjärjestelmä BIOS, *Basic I/O System*.

BIOS on laitteistoriippuvainen ja se piti kirjoittaa kulloisellekin laitteistolle sopivaksi, loppuosa käyttöjärjestelmästä on laitteistoriippumaton. BIOS sisältää 17 funktiota (CP/M-versiossa 2.2), joita käytetään mm. näppäimistön lukuun, merkin tulostukseen näytölle ja sektorin kirjoittamiseen ja lukuun levykkeeltä. Tietokoneen käynnistyessä BIOS lataa käyttöjärjestelmän muut osat levykkeeltä. BDOS sisältää toiminnot tiedostojen käsittelyyn, näytölle kirjoittamiseen ja tulostamiseen. CP/M käsittelee laitteistoa vain BIOS-kutsujen kautta, eli kun BIOS oli kirjoitettu uudelle laitteelle, käyttöjärjestelmä toimi siinä. CP/M:n versiossa 2.2 käyttöjärjestelmän koko on 3 584 tavua. Sen lisäksi komentotulkki vie vielä noin kaksi kilotavua. Ohjelmien käynnistämisen lisäksi käyttöjärjestelmässä on 38 funktiokutsua lähinnä tiedostojen käsittelyyn.

Muistin alkupään 256 tavua on varattu suorittimen keskeytysvektoreille, muutamille muuttujille ja käynnistettävän ohjelman komentorivipuskuriksi. Aluetta seuraa ohjelmille ja datalle tarkoitettu alue TPA (*Transient Program Area*), joka rajoittuu muistin yläpäähän ladattuihin BIOSiin ja BDOSiin (joista käytetään yhteisnimikettä FDOS).

Laitteistot
-----------

CP/M:stä oli versiot useille eri suoritinarkkitehtuureille. Intel 8080 -yhteensopivaa suoritinta, erityisesti Zilog Z80:aa käyttävissä mikrotietokoneissa se oli suosittu. CP/M tuki kaikkiaan 64 kB keskusmuistia. Suosittu alkuaikojen järjestelmä perustui 8080-suorittimeen, 4 kB muistiin ja yhteen 8 tuuman levykeasemaan. Myöhemmissä tietokoneissa oli tyypillisesti Zilog Z80, 64 kB muistia ja kaksi 360 kB, 5¼ tuuman levykeasemaa. Kalleimmissa malleissa toinen levykeasemista oli korvattu yleensä 10 MB kovalevyasemalla. Myös 3½-tuumaisia, kapasiteetiltaan isompia levykkeitä ("korppuja") oli käytössä.

CP/M oli käytössä jopa satojen eri valmistajien tietokoneissa. Suosituimpia olivat Altair, IMSAI 8080, Osbornen ja Kaypron kannettavat sekä MSX-kotitietokoneet. Jopa Apple II:een sai Z80-kortin, jolla pystyi ajamaan CP/M-ohjelmia.

Tiedostojärjestelmä
-------------------

CP/M:n tiedostojärjestelmässä levykkeellä on vain yksi hakemisto. Hakemiston koko on kiinteä.

Hakemisto on taulukko 32 tavun tietueita. Tiedoston nimi koostuu 8+3 merkistä, kuten myöhemmässä MS-DOS-käyttöjärjestelmässäkin. Tiedoston nimen lisäksi hakemistotietue sisältää käyttäjäkoodin, 128-tavuisten levylohkojen määrän ja 16 tavua levylohkojen numeroita. Tilanvarausta varten puolestaan levy on jaettu 1 kB lohkoihin, ja tiedoston hakemistotietue sisältää tiedon siitä, mitkä lohkot kuuluvat tiedostoon.

Tiedoston kokoa tavuina ei tallenneta, joten tiedostoa käsittelevän ohjelman täytyy pitää huolta siitä, ettei se lue tiedoston lopun ohi. Käytännön nyrkkisäännöksi muodostui päättää tekstitiedostot ohjauskoodilla control-Z (ASCII: SUB tai 0x1A).

Tiedostojärjestelmä ei pidä yllä tietoa levykkeen vapaista lohkoista. Levynvaihdon yhteydessä käyttöjärjestelmä lukee koko hakemiston läpi ja muodostaa bittikartan, johon on merkitty tiedostoille varatut ja käytettävissä olevat alueet.

Koska yksi hakemistotietue voi osoittaa vain 16 lohkoa, 16  kB suuremmat tiedostot vaativat usean hakemistotietueen. Tähän käytetään hakemistotietueen extends-kenttää, joka kertoo, monesko tiedostolle varattu tietue on kyseessä.

Lisäksi CP/M:n hakemisto sisältää käyttäjäkentän, jonka avulla tiedostoja voi ryhmitellä. Käyttöjärjestelmä listaa ainoastaan ne tiedostot, joiden käyttäjä-kenttä on saman kuin nykyinen käyttäjänumero. Käyttäjää vaihdetaan komentotulkin komennolla `USER x`, jossa x on luku 0–15. Eräät valmistajat lisäsivät tähän salasanakyselyn, mutta peruskäyttöjärjestelmässä käyttäjänvaihtoon ei sisältynyt mitään tietoturvaa, vaan käyttäjää voi vaihtaa ilman salasanoja.

Komentotulkki (CCP) ja apuohjelmat
----------------------------------

Tietokoneen käynnistyttyä se jää komentotulkin "A>"-kehotteeseen, josta voi käynnistää ohjelmia tai käsitellä tiedostoja sisäänrakennettujen komentojen ja erillisten apuohjelmien avulla. Komentotulkki sisältää komennot:

* `ERA` - tiedoston tuhoaminen
* `DIR` - hakemistolistaus
* `REN` - tiedoston uudelleennimeäminen
* `SAVE` - muistin tallentaminen levykkeelle
* `TYPE` - tiedoston tulostaminen näytölle
* `USER` - käyttäjäalueen vaihtaminen.

Muut toimet tehdään ulkoisilla apuohjelmilla, joista ehkä tärkein on `PIP` (nimi tulee DEC PDP-6:n *Peripheral Interchange Program* -ohjelmasta), jolla voi kopioida tiedostoja eri laitteiden välillä - yhtä lailla levykkeeltä levykkeelle, näppäimistöltä levykkeelle kuin levykkeeltä tulostimellekin: `PIP LST:=tiedosto.txt`

Ohjelmistot
-----------

Ohjelmat toimitettiin ensi alkuun 8 tuuman levykkeellä, jolle vakiintui kaikissa tietokoneissa toimiva formaatti. Myöhemmin siirryttiin käyttämään 5¼-tuumaisia levykkeitä, mutta yhteisen standardin puuttuessa yhden valmistajan koneessa formatoituja levykkeitä ei yleensä voinut lukea toisten valmistajien koneilla. Poikkeuksiakin oli, esimerkiksi Osborne 1 pystyi käsittelemään muita formaatteja levyasematunnuksen perusteella.

Suosittuja CP/M:n ohjelmia olivat tekstinkäsittelyohjelmat Magic Wand ja WordStar, dBASE-tietokanta, KAMAS, Turbo Pascal sekä taulukkolaskentaohjelmat Multiplan ja SuperCalc. Ilmainen XMODEM mahdollisti modeemin käytön ja tiedostosiirrot.

Lisäksi CP/M sisältää perustyökalut konekieliseen ohjelmointiin (ASM, LOAD, DDT ja ED).

16-bittiset versiot
-------------------

Digital Research kehitti 16-bittisille suorittimille omat versiot CP/M:stä: **CP/M-86** Intel 8086:lle, **CP/M-68k** Motorola 68000:lle ja **CP/M-8000** Zilog Z8000:lle.

Lähteet
-------

1. 1 2 3 4  David Laws: Early Digital Research CP/M Source Code *computerhistory.org*.  1.10.2014. Viitattu 24.12.2019. (englanniksi)
2. ↑  Herbert R. Johnson: CP/M and Digital Research Inc. (DRI) History *retrotechnology.com*.  30.7.2014. Viitattu 20.6.2019. (englanniksi)
3. ↑  Gary Kildall and Collegial Entrepreneurship – Internet Archive
4. 1 2 3  Mary Bellis: How MS-DOS Put Microsoft on the Map *thoughtco.com*.  13.2.2019. Viitattu 20.6.2019. (englanniksi)
5. 1 2  Jimmy Maher: The complete history of the IBM PC, part two: The DOS empire strikes  31.7.2017. Ars Technica. Viitattu 23.6.2019. (englanniksi)
6. ↑  Andrew Orlowski: MS-DOS paternity suit settled  30.7.2007. The Register. Viitattu 23.6.2019. (englanniksi)
7. ↑  Tony Smith: Microsoft's MS-DOS is 30 today  27.7.2011. The Register. Viitattu 23.6.2019. (englanniksi)
8. ↑  Tony Smith: Microsoft's MS-DOS is 30 today (sivu 2)  27.7.2011. The Register. Viitattu 23.6.2019. (englanniksi)
9. 1 2  A Short History of CP/M *landley.net*. Viitattu 24.12.2019. (englanniksi)
10. 1 2 3 4 5 6 7  CP/M Operating System Manual, 3rd edition (PDF)  1983. Yhdysvallat:  Digital Research. Viitattu 2.8.2013. (englanniksi)

Aiheesta muualla
----------------

* Kuvia tai muita tiedostoja aiheesta **CP/M** Wikimedia Commonsissa

* Digital Researchin kotisivu:
* The Unofficial CP/M Website sisältää tietoa CP/M:stä, käsikirjoja, lähdekoodeja yms. (englanniksi)