# CP/M

Il CP/M (Control Program/Monitor o Control Program for Microcomputers) è un sistema operativo per micro e personal computer pubblicato dalla Digital Research, Inc. di Gary Kildall nel 1974.
Sviluppato inizialmente per l'Intel 8080, girava anche sul compatibile Zilog Z80 e sull'evoluzione dell'8080, l'Intel 8085; negli anni ottanta fu pubblicato anche per altre CPU, come l'Intel 8086 e il Motorola 68000. L'insieme formato dal CP/M e da computer con il Bus S-100, realizzato per primo sul MITS Altair, ha costituito di fatto il primo vero e proprio standard industriale nel settore dei microcomputer, ampiamente diffuso dalla seconda metà degli anni settanta fino all'avvento del PC IBM nei primi anni ottanta. Il sistema operativo era così diffuso che sul mercato comparvero presto le schede per rendere compatibili con il CP/M i computer di altre marche, come ad esempio la Microsoft Z80 Card per l'Apple II o la cartuccia CP/M per il popolare Commodore 64. Il Commodore 128 integra la CPU Zilog Z80 per cui era in grado nativamente di caricare ed eseguire il CP/M e i programmi scritti per questo sistema.
Il CP/M venne progressivamente sostituito dall'MS-DOS.

## Storia
### La creazione e la diffusione

Il CP/M in origine era distribuito su floppy disk da 8 pollici, girava sulla CPU Intel 8080 (e sul compatibile e popolare Zilog Z80). In seguito, con il passaggio al formato da 5 pollici e ¼ il CP/M si adeguò ma, sfortunatamente, ogni azienda realizzò un proprio formato dei dati memorizzati sui dischi da 5¼ e ciò rese lo scambio dei dischi più difficile. I programmi scritti per il CP/M erano comunque completamente portabili tra diverse macchine con la stessa CPU; ciò lo rese popolare e fu scritto per il CP/M molto più software di quanto non fosse stato mai scritto per i sistemi operativi strettamente dipendenti dall'hardware.
Centinaia di diverse marche di macchine permettevano di caricare il CP/M: alcuni esempi degni di nota, oltre al già menzionato Altair, sono l'IMSAI 8080, l'Altos, i portabili Osborne 1, Kaypro e Epson PX-8, persino l'Apple II quando veniva installata la Microsoft SoftCard, una scheda opzionale con il processore Z80. Il sistema con il CP/M probabilmente più venduto è stato il Commodore 128, sebbene in pochi realmente abbiano utilizzato le caratteristiche proprie del CP/M su tale home computer. CP/M è ancora oggi supportato da computer basati sullo Z80, come lo ZX Spectrum Next.
WordStar, uno dei primi programmi di videoscrittura a essere utilizzato diffusamente, e il dBASE, il primo software popolare per la gestione dei database per piccoli computer, ma anche programmi grafici come il primo Autocad, furono originariamente scritti per il CP/M. I compilatori Basic più utilizzati furono inizialmente il CBASIC e successivamente l'MBASIC il primo prodotto dell'allora sconosciuta Microsoft.

### I computer a 16 bit

Versioni del CP/M sono state realizzate per alcune CPU a 16 bit, ma richiedevano che i programmi applicativi fossero ricompilati per le nuove CPU, o, se erano scritti in linguaggio assembly, di essere praticamente riscritti da capo. Uno dei primi fu il CP/M-86 per l'Intel 8086, che fu seguito molto presto dal CP/M-68k per il Motorola 68000. A questo punto il CP/M a 8 bit venne rinominato CP/M-80 per evitare confusione.
Il CP/M-68k è stato utilizzato praticamente solo nella versione per Atari ST del GEM, l'interfaccia grafica dell'Atari TOS. Il CP/M-86 aveva il potenziale per diventare il sistema operativo standard per i nuovi PC IBM, ma non fu raggiunto l'accordo, per le richieste economiche che IBM non accettò. Questo spinse la società a rivolgersi alla Microsoft. Da un clone di una parte del CP/M, chiamato QDOS della Seattle Computer Products, fu creato il sistema operativo PC-DOS/MS-DOS che divenne il sistema operativo "ufficiale" del PC IBM e degli innumerevoli compatibili PC-IBM immessi sul mercato negli anni successivi. La Digital Research Inc minacciò di far causa a IBM e Microsoft e quindi IBM consentì di vendere anche il CP/M-86 come sistema operativo per i suoi computer. Ma il prezzo cinque volte più elevato rispetto all'MS-DOS spinse la maggior parte degli acquirenti verso il prodotto Microsoft.

### La diffusione dell'MS-DOS e il ridimensionamento

Molti dei concetti di base e dei meccanismi interni delle prime versioni dell'MS-DOS erano copiati esattamente da quelli del CP/M. Strutture interne quali quelle per la gestione dei file di dati erano identiche, ed entrambi si riferivano alle unità a disco con una lettera (A:, B:, etc.). La principale innovazione dell'MS-DOS fu l'uso di un unico, moderno file system, il FAT, a differenza del CP/M che ne supportava diversi tipi. Un certo grado di similitudine fu senz'altro voluto, soprattutto per semplificare il porting del software scritto su CP/M, come il WordStar e il dBase. Tuttavia, le ultime innovazioni introdotte nelle versioni più mature del CP/M — quale ad esempio il supporto per aree utente separate sullo stesso disco — non furono mai portate nell'MS-DOS.
L'interfaccia utente dell'MS-DOS, tuttavia, è un po' più user-friendly. Si confronti, ad esempio, il comando di copia semplice del CP/M, PIP:
    PIP <file di destinazione>=<file di origine>
con la sintassi più intuitiva del comando del DOS COPY:
    COPY <file di origine> <file di destinazione>
Esso fu usato anche nel CP/M come comando esterno, come lo fu il comando XCOPY dell'MS-DOS.
Il CP/M perse posizioni sul mercato man mano che il mondo del microcomputer migrava verso le piattaforme basate sul PC-IBM compatibili già venduti con MS-DOS, senza mai riguadagnare in seguito la popolarità di cui aveva goduto inizialmente. Le ultime versioni del CP/M-86 avevano fatto passi avanti significativi in termini di prestazioni e di facilità di utilizzo, tanto da essere considerato da alcuni, nel corso degli anni 1980 enormemente migliore dell'MS-DOS stesso, dato che era multiutente e multitasking come gli UNIX. Per riguadagnare nel marketing, il CP/M-86 venne sostituito con il DR-DOS dalla DR.

## Descrizione

L'innovazione chiave introdotta dal CP/M fu quella di rendere indipendente il sistema operativo dall'hardware del computer su cui girava mediante l'uso di livelli di astrazione dove il CP/M accedeva all'hardware usando un livello software più basso chiamato BIOS (Basic Input Output System). In questo modo gli sviluppatori poterono scrivere una sola versione del sistema operativo che poteva girare su qualsiasi macchina per la quale era disponibile l'apposito BIOS.
Il livello superiore costituiva il sistema operativo vero e proprio ed era diviso a sua volta in due parti principali: il CCP (Command Control Processor), l'interfaccia a riga di comando che interpretava i comandi, ed il BDOS (Basic Disk Operating System), che si occupava delle funzionalità di sistema.

### CCP

L'interfaccia del CCP derivava dai sistemi operativi della Digital Equipment, quali l'RSTS/E per il PDP-11. Il CCP si occupava di interpretare i comandi, che in genere erano formati da una keyword (parola chiave) seguita da un elenco di parametri separati da spazi o da caratteri speciali. I nomi dei comandi, a volte, non erano molto comprensibili e indicativi dell'operazione che svolgevano: è il caso, ad esempio del comando per copiare i file che si chiamava PIP (Peripheral-Interchange-Program).

### BDOS

Il BDOS si occupava di trasformare le istruzioni ricevute dal CCP in istruzioni di un livello ancora più basso, come "apri il file XXX", che erano poi eseguite dal BIOS. Il BDOS era composto da circa 40 istruzioni base per interagire con il disco e con le periferiche seriali collegate alla macchina. I programmi potevano accedere a queste funzioni mediante una "tabella dei salti" (jump table), una porzione della memoria contenente l'elenco degli indirizzi delle locazioni dove erano memorizzate le funzioni offerte dal BDOS.

### BIOS

Il BIOS eseguiva i comandi ricevuti dal BDOS grazie a circa 20 funzioni base, come ad esempio i comandi per il posizionamento delle testine sui dischi e la lettura di un settore del disco. Ad esempio se l'utente digitava un comando che accedeva ad un file, il CCP per primo inviava al BDOS la richiesta di accedere a quel file, che a sua volta si occupava di trasformarlo in funzionalità di sistema, quali "apri il file", inviati al BIOS. Per illustrare il flusso dei comandi, si può prendere in esame il comando PIP già menzionato. Quando nel CCP veniva inserito un comando PIP, esso veniva suddiviso in una serie di istruzioni per il BDOS, simili a "trova il file foo.txt, aprilo, crea un nuovo file col nome bar.txt...". I comandi del BDOS a loro volta venivano inviati al BIOS come stringhe di istruzioni ancora più semplici, del tipo "seleziona il disco, muovi la testina del disco a questo settore, leggi i dati in modalità raw da settore..." ecc.
Grazie al BIOS era possibile effettuare il porting del CP/M verso una differente piattaforma hardware con un lavoro minimo, limitato all'adattamento dei semplici comandi contenuti nel BIOS a quella particolare macchina, senza riscrivere il resto del sistema operativo. Ciò ridusse in maniera significativa i tempi di sviluppo necessari per supportare nuove macchine, costituendo una delle ragioni principali della diffusione del CP/M. Al giorno d'oggi questo tipo di astrazione è comune alla maggior parte dei sistemi operativi ma, al momento della nascita del CP/M, ciascun sistema era progettato esclusivamente per girare su una piattaforma specifica e un design multilayer era considerato non necessario.