# CP/M

CP/M was oorspronkelijk een 8 bits-besturingssysteem. Het was het eerste besturingssysteem dat dankzij een modulaire opbouw aangepast kon worden aan de hardware van verschillende typen computers.

## Geschiedenis
### 8 bits-versies

CP/M werd in 1973 ontwikkeld door Gary Kildall in de programmeertaal PL/M. Net als MS-DOS, in feite een opvolger van CP/M, maakt het gebruik van een zogenaamde opdrachtregel, waarin opdrachten moeten worden getypt. CP/M betekende oorspronkelijk Control Program/Monitor en werd later uitgelegd als Control Program for Microcomputers.
Het werd op de markt gebracht door Kildalls Digital Research. Het was ontworpen voor computers uitgerust met de Intel 8080-processor en ook geschikt voor de daarmee compatibele 8085- en de Zilog Z80-processor. Deze processoren konden met hun 16 adresbits maximaal 64 kB geheugen adresseren (de aanduiding "8 bits" heeft betrekking op de databus). Van deze drie processoren werd de Z80 uiteindelijk verreweg het meest gebruikt en sommige programma's waren uitsluitend voor deze processor geschikt. Ook de Apple II kon door middel van een uitbreidingskaart van Microsoft, Applied Engineering of ander fabricaat met daarop een Z80 voor CP/M geschikt gemaakt worden.
CP/M was oorspronkelijk ontworpen voor het gebruik met enkelzijdige floppydisks met enkele dichtheid van 8 inch (20,32 cm) met een capaciteit van 243 kB en werd ook in dit formaat geleverd. Maar al spoedig werden schijven van 5¼ inch (13,335 cm) populair en CP/M werd aangepast om schijven van verschillende capaciteit te kunnen gebruiken. Bij gebrek aan een standaard voor 5¼ inch ontwikkelde echter bijna elke fabrikant zijn eigen indeling binnen dit formaat (met verschillen in dichtheid, sectorgrootte, directorygrootte en aantallen zijden, sporen en systeemsporen (gereserveerde ruimte voor CP/M) etc.), wat in honderden onderling niet uitwisselbare formaten resulteerde, waardoor de uitwisseling van software en data bemoeilijkt werd. Ook werden schijven van 3½ inch (8,89 cm) en 3 inch (7,62 cm) gebruikt.
Vanaf CP/M 2.2, de eerste versie die redelijk vrij van fouten en eenvoudig voor verschillende schijfformaten aan te passen was, nam het gebruik een grote vlucht. Met 64 kB geheugen was, na aftrek van de ruimte benodigd voor BDOS en BIOS en vaak ook het videogeheugen, circa 55 à 57 kB vrije ruimte voor gebruikersprogramma's en hun data beschikbaar.
De laatst uitgebrachte 8 bits-versie, CP/M Plus (intern werd de aanduiding 3.0 gebruikt), was geschikt voor meer dan 64 kB geheugen door middel van bank switching. Een deel van het geheugen was omschakelbaar tussen verschillende "banken"; het bovenste deel was gemeenschappelijk voor alle banken. Het BDOS en BIOS bevonden zich nu in een andere bank dan het gebruikersprogramma, waarvoor nu circa 60 kB beschikbaar was. Doordat de grootte van BDOS en BIOS niet meer ten koste van de vrije ruimte ging, kon de functionaliteit fors worden uitgebreid ten opzichte van het toch wel spartaanse 2.2. Ook was er in het geheugen nu plaats voor zaken als een kopie van de CCP, schijfcaching, een printerbuffer, een toetsenbordbuffer, commandoregelherhaling, functietoetsdefinities etc., waardoor de snelheid aanzienlijk toenam.
Toch bleef de geheugenlimiet van 64 kB knellen. Veel programma's voor CP/M waren inmiddels ook in een versie voor MS-DOS verkrijgbaar, vaak met extra mogelijkheden dankzij het grotere geheugen. Nieuwe programma's werden nauwelijks meer uitgebracht. Een uitzondering was versie 4 van WordStar in 1987. Met de introductie van kantoorpakketten, met daarin geïntegreerd een tekstverwerker, een spreadsheet- en een databaseprogramma, was de tijd van de 8 bits-processoren voorbij.

### 16 bits-versies

Toen IBM in 1981 een besturingssysteem voor zijn 16 bits-IBM PC zocht, klopte het als eerste bij Digital Research aan. Daar werd echter in eerste instantie niet adequaat gereageerd, waarop IBM zijn heil bij Microsoft zocht, dat geen besturingssysteem voorhanden had, maar er een aankocht, QDOS, en aan de wensen van IBM aanpaste. Nadat Digital Research alsnog met CP/M-86 kwam, een 16 bits-versie afgeleid van CP/M 2.2, werd de IBM PC naar keuze geleverd met CP/M-86 of Microsoft PC-DOS. Ondanks de iets betere specificaties van CP/M-86 was het door het prijsverschil (PC-DOS een paar tientallen euro's, CP/M-86 circa 725 euro) in het nadeel. Na de introductie van submappen in versie 2 van PC-DOS, waar het bestandssysteem van CP/M zich moeilijk voor leende, was het pleit snel beslecht.
Opvolgers van CP/M 86 waren nog DOS Plus, Concurrent DOS en REAL/32. Ook was er een versie voor de Motorola 68000-processor, CP/M-68k genaamd.
CP/M-programma's voor 8 bits-processoren waren niet geschikt voor 16 bits-processoren en omgekeerd. Sommige computers, zoals de DEC Rainbow 100, beschikten daarom over twee processoren. Aan het bestandstype was te zien voor welke processor een programma bedoeld was: COM voor 8 bits, CMD voor 16 bits.

## Onderdelen

CP/M bestaat uit drie modules:
* De CCP (console command processor) is de interface met de gebruiker als er geen ander programma actief is. Het voert enkele eenvoudige commando's uit en laadt de gebruikersprogramma's.
* Het BDOS (basic disc operating system) is het belangrijkste deel van CP/M. Het verwerkt opdrachten van gebruikersprogramma's en de CCP, verzorgt alle in- en uitvoer van en naar bestanden en randapparatuur en beheert de schijfadministratie.
* Het BIOS (basic input/output system, meestal niet in ROM, zoals bij de huidige pc) is de interface met de hardware. Alleen dit deel hoeft aan de hardware te worden aangepast. Het verzorgt in opdracht van het BDOS de in- en uitvoer op het laagste niveau: lezen en schrijven van afzonderlijke lettertekens en schijfsectoren.

## Instructieset

CP/M bevat een aantal hulpprogramma's die tot de kern van het besturingssysteem behoren (onderdeel van CCP):
* DIR - opvragen van de directory van een opslagmedium
    DIR - directory van de actuele schijf
    DIR A: - directory van de A:-schijf
    DIR A:VOORRAAD.DAT - directory van het bestand VOORRAAD.DAT op de A:-schijf
    ^PDIR A: (^P staat hierbij voor "Control-P") - Als DIR A:, maar nu wordt de uitvoer rechtstreeks naar de printer gestuurd.
* ERA - verwijderen van een bestand
    ERA VOORRAAD.DAT - verwijdert bestand VOORRAAD.DAT van de actuele schijf, indien aanwezig. Indien niet aanwezig volgt de reply NO FILE
    ERA A:VOORRAAD.DAT - verwijdert bestand VOORRAAD.DAT van de A:-schijf, indien aanwezig.
* REN - hernoemen van een bestand
    REN VOORRAAD.OUD = VOORRAAD.DAT - hernoemt het bestand VOORRAAD.DAT van de actuele schijf in VOORRAAD.OUD.
* TYPE - de inhoud van een bestand tonen
    TYPE VOORRAAD.DAT - toont de inhoud van bestand VOORRAAD.DAT op scherm.
* SAVE - een deel van de TPA opslaan als bestand, overigens bedoeld voor assembler-programma's
    SAVE 6 PROGRAM.COM - slaat de eerste 6 pagina's (elk 256 bytes) van de TPA op onder de naam PROGRAM.COM
Daarnaast is er een aantal utility's dat niet is ingebouwd (niet onderdeel van CCP):
* STAT - opvragen van actuele gegevens over schijven, gebruikersnummers, bestanden, de TPA
    STAT - geeft informatie over de aanwezige schijven
    STAT PIP.COM - geeft informatie over bestand (programma) PIP.COM
    STAT USR: - geeft informatie over het actieve gebruikersnummer, en de aanwezige gebruikersnummers
    STAT D:DSK: - geeft specificaties over de D-schijf
* PIP - Peripheral Interchange Program - utility voor het overbrengen van bestanden van het ene randapparaat naar het andere
    PIP A:PROGRAM.COM = B:PROG.COM - maakt een kopie van PROG.COM op B: en slaat deze kopie op A: op als PROGRAM.COM
    PIP B: = *.FOR - kopieert alle bestanden van het type .FOR van de actieve drive naar de B:schijf
* ED - een naar huidige maatstaven eenvoudige line-editor.