CP/M

miniatura|Captura de pantalla de CP/M 2.2, executándose nun computador «Sanco 8001». Directorio de disquete.
**CP/M** (***C**ontrol **P**rogram/**M**onitor* ou ***C**ontrol **P**rogram for **M**icrocomputers*: «programa de control para microordenadores») é un sistema operativo de disco creado orixinalmente por Gary Kildall de Digital Research, Inc. para microordenadores baseadas nos microprocesadores Intel 8080/85. Inicialmente limitábase ao uso dun só usuario/tarefa en procesadores de 8 bits e con pouco máis de 64 KB de RAM, aínda que versións posteriores engadiron capacidades multiusuario/multitarefa e foron portadas a CPUs de 16 bits.

A combinación de CP/M e ordenadores persoais co bus S-100, iniciada co MITS Altair 8800, foi un dos primeiros estándares da industria para microordenadores e utilizouse amplamente desde a década de 1970 ata mediados da de 1980. Ao reducir drasticamente a cantidade de programación necesaria para instalar unha aplicación no ordenador dun novo fabricante, CP/M aumentou tanto os mercados de software como de hardware.

* Un terminal de ordenador co conxunto de caracteres ASCII
* Un microprocesador Intel 8080 (e posterior, 8085 ou Z80)
* Polo menos 16 KB de RAM
* Un medio para iniciar a carga do primeiro sector dun disquete na memoria
* Polo menos unha unidade de disco

O único hardware compatible con CP/M, na versión distribuída por Digital Research, era o *Intel 8080 Development System* («Sistema de desenvolvemento Intel 8080»). Os fabricantes de sistemas compatibles con CP/M adaptaron partes do sistema operativo para as súas propias combinacións de memoria instalada, unidades de disco e consola de entrada. O CP/M tamén podía executarse en sistemas baseados no procesador Zilog Z80, xa que o Z80 era capaz de executar código 8080. Aínda que CP/M non era capaz de executar ningunha das instrucións específicas do Z80, moitas aplicacións foron programadas para máquinas CP/M baseadas no Z80.

En moitas máquinas, o *bootstrap* era un programa mínimo almacenado na ROM; noutras, este programa tiña que inserirse directamente na memoria a través dun panel frontal cada vez que se cargaba o sistema operativo.

O CP/M empregaba un conxunto ASCII de 7 bits (128 caracteres). Os outros 128 caracteres posibles para un conxunto de 8 bits non estaban estandarizados. Por exemplo, un modelo Kaypro utilizábaos para almacenar caracteres do alfabeto grego, mentres que as máquinas Osborne utilizaban o oitavo bit para indicar un carácter de subliñado. Os sistemas internacionais CP/M empregaban con frecuencia o estándar ISO 646 para adaptar conxuntos de caracteres, substituíndo certos caracteres ASCII por caracteres do idioma local, en lugar de engadilos máis alá do límite de 7 bits.

## Compoñentes do sistema operativo 
Nas versións de 8 bits, o núcleo CP/M dividíase en tres compoñentes: o procesador de comandos da consola (ou CCP), o sistema operativo de disco básico (ou BDOS) e o sistema básico de entrada/saída (ou BIOS). O CCP e o BDOS eran iguais en todas as instalacións dunha revisión CP/M común, pero a parte da BIOS sempre se adaptou a un hardware específico. Engadir memoria a un ordenador, por exemplo, significaba que o sistema CP/M tiña que ser reinstalado. Unha vez instalado, o sistema operativo almacenábase en espazos reservados ao comezo de calquera disco que se utilizaría para arrincar o sistema. No arranque, o cargador de arranque carga o sistema operativo desde o disquete na unidade `A:`.

Segundo os estándares modernos, CP/M era primitivo debido ás restricións extremas no tamaño dos programas. Coa versión 1.0, non se puido detectar un cambio de disquete. Se un usuario cambiaba de disco sen reler manualmente o directorio de ficheiros, o sistema sobrescribiría o novo disco usando a información do directorio do disco antigo, destruíndo os datos almacenados no novo disquete. A partir das versións 1.1 ou 1.2, este problema reduciuse: se alguén cambiaba de disco sen ler o directorio do novo disco e tentaba escribir nel, o sistema operativo emitía o aviso de erro, evitando a sobreescritura, pero requirindo un reinicio (o que só tardaba uns segundos, pero implicaba a perda de todos os datos da memoria).

A maior parte da complexidade de CP/M estaba illada en BDOS, e en menor medida en CCP. Significaba que ao portar o número limitado de comandos simples da BIOS a unha plataforma de hardware particular, todo o sistema operativo funcionaría. Isto reduciu significativamente o tempo de desenvolvemento do programa necesario para soportar novas máquinas, e foi unha das principais razóns para o uso xeneralizado de CP/M. Hoxe, esta clase de abstracción é común á maioría dos sistemas operativos, pero no momento do nacemento de CP/M, os sistemas operativos estaban normalmente deseñados para executarse nunha soa plataforma de hardware, e os sistemas multiplataforma eran considerados innecesarios.

#### Comandos externos 
Os *comandos externos* (ou *transitorios*) están almacenados en disquetes (ou discos ríxidos) para o seu uso posterior.

Cada unidade de disco identificábase cunha letra de unidade. Normalmente, as dúas unidades de disco identificáronse como unidades `A:` e `B:`. Para referirse a un ficheiro nunha unidade específica, a letra da unidade tiña como prefixo o nome do ficheiro, separado por dous puntos, por exemplo `A:FILE.TXT`. Sen a letra da unidade como prefixo, o estándar era utilizar ficheiros da unidade actual (por exemplo, un programa que se executa na unidade B accederá aos ficheiros da unidade B a menos que os nomes dos ficheiros estean precedidos dunha letra da unidade).

O tamaño do ficheiro especificouse como o número de rexistros de 128 bytes (correspondentes directamente aos sectores do disco en unidades de 8 polgadas) ocupados por un ficheiro no disco. Non había un xeito estándar de especificar o tamaño exacto dos ficheiros en bytes. O sistema operativo mantivo o tamaño actualizado dun ficheiro no bloque de control de ficheiros (FCB). Dado que moitas aplicacións (como os editores de texto) tratan os ficheiros como secuencias de caracteres, en lugar de secuencias de rexistros, por convención, os ficheiros de texto rematan cun carácter de CTRL-Z (ASCII SUB, hex 1A). Determinar o final dun ficheiro de texto consistía, polo tanto, en examinar o último rexistro do ficheiro para o CTRL-Z de terminación. Isto tamén significaba que inserir un carácter de CTRL-Z no medio dun ficheiro xeralmente tiña o efecto de truncar o contido de texto do ficheiro.

Non había soporte para a modificación da data do ficheiro (*marcas de tempo*), aínda que algunhas versións posteriores de CP/M engadiron esta función como extensión.

CP/M 2.2 non tiña subdirectorios na estrutura de ficheiros, pero había 16 «espazos de usuario» para organizar ficheiros nun disco.

#### Algúns tipos de ficheiros CP/M 
### Memoria libre para programas 
Na versión orixinal de CP/M para o 8080, 8085 e Z80, a memoria de lectura/escritura entre o enderezo hexadecimal 0100 e a localización xusto antes do enderezo almacenado en 0006H (o enderezo máis baixo do BDOS) é a *Transient Program Area* (TPA, ou «Área de Programa Transitorio») dispoñible para os programas de aplicación CP/M. Aínda que todos os procesadores Z80 e 8080 podían usar 64 quilobytes de memoria, a cantidade dispoñible para os programas podía variar dependendo do deseño do computador en particular. Algúns ordenadores empregan unha gran parte do espazo de enderezos para outras tarefas, como a ROM da BIOS ou a memoria da pantalla de vídeo. Polo tanto, algúns sistemas tiñan máis memoria dispoñible para TPA que outros. A conmutación de bancos era unha técnica común que permitía aos sistemas ter un TPA alto usando memoria ROM e de vídeo, se fose necesario. O CP/M 3.0 tamén permitía que partes de BDOS estivesen no banco de intercambio de memoria.

Este cambio de nome de CP/M formou parte dun esforzo máis amplo de Kildall e a súa esposa e socia, Dorothy McEwen, para converter o proxecto persoal de Kildall de CP/M e PL/M nunha empresa comercial. Os Kildall procuraron astutamente establecer a marca Digital Research e as súas liñas de produtos como sinónimo de «microcomputadora» nas mentes dos consumidores, do mesmo xeito que IBM e Microsoft conseguiron máis tarde facer que o termo «computadora persoal» fose sinónimo dos produtos ofrecidos por ambas as compañías. Máis tarde, o nome da empresa *Intergalactic Digital Research, Inc.* cambiou a *Digital Research, Inc*.

#### Portabilidade 
[miniatura|Tarxeta para o [Apple II, con o procesador Z80.]]
CP/M describíase como un "bus de software", que permitía que varios programas interactuasen con diversos hardware dun xeito estandarizado. Os programas escritos para CP/M eran normalmente portátiles entre diferentes máquinas, xeralmente requirindo só a especificación de secuencias de escape para o control da pantalla e da impresora. Esta portabilidade fixo que CP/M fose moi popular, e escribiuse moito máis software para CP/M que para sistemas operativos que podían executarse nunha única marca de hardware. Unha restrición á portabilidade era que certos programas usaban o conxunto de instrucións do procesador Z80, que non se podía executar en procesadores 8080 ou 8085.

Moitas marcas diferentes de máquinas empregaban CP/M, sendo algúns exemplos notables o Altair, o IMSAI 8080, o Osborne 1, os portátiles Kaypro e os microcomputadores MSX. Mesmo o Apple II podía executar CP/M cando se instalaba unha tarxeta Z80 adicional. O sistema estándar compatible co CP/M axudou a establecer o récord de vendas de todos os tempos, probablemente co Commodore 128 como hardware, aínda que poucas persoas utilizaron realmente as capacidades do CP/M. No Reino Unido, o CP/M tamén estaba dispoñible para o BBC Micro, equipado cun coprocesador Z80. Tamén funcionaba co famoso sistema de procesamento de textos Amstrad PCW e estaba dispoñible para a serie Amstrad CPC e modelos posteriores do ZX Spectrum.

#### Aplicacións 
WordStar, un dos primeiros procesadores de texto amplamente utilizados, e dBase, un programa de bases de datos pioneiro e famoso para microordenadores, foron programados orixinalmente para CP/M. Un dos primeiros programas esquematizadores, KAMAS (*Knowledge and Mind Amplification System* ou «Sistema de Amplificación do Coñecemento e a Mente»), tamén foi programado para CP/M, aínda que posteriormente foi reescrito para MS-DOS. Turbo Pascal, un predecesor de Delphi de Borland, e Multiplan, un predecesor de Microsoft Excel, tamén apareceron en CP/M, moito antes de que as versións para MS-DOS estivesen dispoñibles. AutoCAD, o programa CAD de Autodesk, tamén debutou en CP/M. Había dispoñible un gran número de compiladores e intérpretes para linguaxes de programación populares da época (como BASIC e FORTRAN), incluíndo varios dos primeiros produtos de Microsoft. Portáronse varios xogos de aventuras baseados en texto, como *Colossal Cave Adventure* e outros exemplos pioneiros de ficción interactiva. *Lifeboat Associates* comezou a recompilar e distribuír software «libre», programado polos usuarios. Un dos primeiros foi XMODEM, que permitía a comunicación por módem e liña telefónica.

#### Gráficos 
Aínda que os sistemas S100 con capacidade gráfica existían dende a comercialización do bus S-100, CP/M non proporcionou ningún soporte gráfico estándar ata o lanzamento de CP/M 3.0 con GSX (*Graphic System eXtension* ou «Extensió Gràfica del Sistema»). Debido á pouca cantidade de memoria dispoñible, os gráficos nunca foron unha característica común asociada co sistema operativo CP/M de 8 bits. A maioría dos sistemas só podían mostrar gráficos e diagramas rudimentarios de arte ASCII en modo texto ou usando un conxunto de caracteres personalizado.

#### Formatos de disco 
[miniatura|[Disco de arranque CP/M (5¼") para o Commodore C128.]]
Aínda que o formato de disquete de densidade única de 8 polgadas (chamado «formato de distribución») estaba estandarizado, utilizáronse varios formatos de 5¼ polgadas dependendo das características dos sistemas e, ata certo punto, das eleccións dos deseñadores. CP/M ofrecía opcións de compatibilidade para controlar o tamaño das áreas reservadas e directorios no disco, e a correspondencia entre sectores lóxicos (como os que usan os programas CP/M) e sectores físicos asignados ao disco. Había varias maneiras de personalizar estas configuracións para cada sistema, pero unha vez creadas, non había unha forma estandarizada para que un sistema cargase a configuración dun disco formatado noutro sistema. Ningún fabricante prevaleceu na era de 5¼ polgadas de CP/M, e os formatos de disco non eran portátiles entre fabricantes de hardware. Un fabricante de software tiña que preparar unha versión separada do programa para cada marca de hardware na que se executaría. No caso dalgúns fabricantes (Kaypro é un exemplo), nin sequera existía estandarización entre os diferentes modelos da compañía. Por este motivo, os programas de transcrición de formatos de disco, que permitían que unha máquina lese moitos formatos diferentes, popularizáronse e reduciron a confusión. Por outra banda, existían programas como *Kermit* que permitían a transferencia de datos e programas dunha máquina a outra empregando os portos serie que tiñan a maioría das máquinas CP/M. O mercado fragmentado do CP/M, que requiría que os distribuidores proporcionasen varios formatos de disco ou investisen en equipos de duplicación multiformato, en comparación cos formatos de disco máis estandarizados do IBM PC, foi un factor que contribuíu á rápida obsolescencia do CP/M despois de 1981.

### Decadencia e fin 
#### O mundo de 16 bits 
miniatura|O *DEC Rainbow*: tres sistemas operativos.
Tamén se produciron versións posteriores de CP/M para algunhas CPU de 16 bits, aínda que as aplicacións tiveron que ser recompiladas para as novas CPU ou, se foran programadas en linguaxe ensambladora, tiveron que ser reescritas en gran parte desde cero.

Un dos primeiros foi o CP/M-86 para o Intel 8086, ao que axiña seguiu o CP/M-68k para o Motorola 68000. Neste punto, o CP/M orixinal de 8 bits pasou a coñecerse co retrónimo "CP/M-80" para evitar confusións. Tamén houbo unha porta para o Zilog Z8000, chamada CP/M-8000.

O CP/M-68k usouse inicialmente no ordenador Atari ST, pero Atari decidiu usar un novo DOS chamado GEMDOS. Tamén se usou nos ordenadores M68 e M68MX. Esperábase que o CP/M-86 fose o sistema operativo estándar para o novo IBM PC, pero DRI e IBM non puideron negociar os termos de desenvolvemento e as condicións de licenza. Entón, IBM negociou con Microsoft, que lle vendeu un sistema operativo baseado nun "clónico" de CP/M, o 86-DOS.

Cando Digital Equipment Corporation lanzou o *Rainbow 100* para competir con IBM, executaba CP/M-80 nun chip Z80 e CP/M-86 ou MS-DOS nun microprocesador 8088. As CPU Z80 e 8088 executábanse simultaneamente. Unha vantaxe do Rainbow era que podía seguir executando software CP/M de 8 bits mentres os usuarios se trasladaban ao mundo de 16 bits de MS-DOS.

#### MS-DOS toma o relevo 
miniatura|CP/M-86 coa versión 1.1 en execución.
A primeira versión de MS-DOS tiña algunha semellanza co CP/M-86, pero axiña diverxiron despois da primeira versión. Moitos dos conceptos básicos e mecanismos internos das primeiras versións de MS-DOS semellaban CP/M. As estruturas de datos de manipulación de ficheiros eran idénticas e ambas facían referencia a unidades de disco cunha letra (`A:`, `B:`, etc.). Esta semellanza facilitou a portabilidade do software máis exitoso de CP/M como WordStar e dBase. Porén, o concepto CP/M de espazos separados para ficheiros de usuario no mesmo disco nunca foi portado a MS-DOS. A principal innovación de MS-DOS foi o seu sistema de ficheiros, FAT. Como MS-DOS tiña acceso a máis memoria (vendéronse poucas computadoras IBM con menos de 64 KB de memoria, mentres que CP/M podía executarse en tan só 16 KB), apareceron máis comandos para a súa liña de comandos, facendo que MS-DOS fose un pouco máis rápido e máis doado de usar en máquinas baseadas en disco.

CP/M rapidamente perdeu súa cota de vendas, mentres o mercado migraba á plataforma de PC, e nunca recuperou a súa antiga popularidade. *Byte Magazine*, naquel momento unha das principais revistas da industria editorial de microcomputadoras, deixou de cubrir produtos CP/M poucos anos despois do lanzamento do IBM PC. Por exemplo, en 1983 aínda había algúns anuncios de tarxetas S100 e artigos de software para o CP/M, pero en 1987 xa non estaban na revista.

As versións posteriores do CP/M-86 fixeron avances significativos no rendemento e na facilidade de uso e fixéronse compatibles con MS-DOS. Para reflectir esta compatibilidade cambiouse o nome e CP/M-86 converteuse en *DOS Plus*, que á súa vez se converteu en DR-DOS.

#### Adeus a CP/M 
[miniatura|Disquetes de 5¼" e unha caixa da [folla de cálculo Lotus 1-2-3.]]
A pesar das previsións optimistas, o CP/M non estivo aquí «para quedarse». Debido á diferenza de prezo, vendéronse máis unidades de IBM PC-DOS que CP/M-86. Ademais, aos desenvolvedores resultou máis doado facer versións de aplicacións CP/M para MS-DOS que para CP/M-86. Ademais, as máquinas de 16 bits tiñan memorias máis grandes e CPU máis rápidas, e MS-DOS aproveitou isto de forma moito máis eficiente. Pronto houbo «aplicacións asasinas» que só funcionaban en MS-DOS e nunca foron portadas a CP/M-86. Un era Lotus 1-2-3, que significaba para o IBM PC o que VisiCalc fora para o Apple II.

## Derivados 
### Oficial 
Algunhas empresas fixeron melloras oficiais de CP/M baseándose no código fonte de Digital Research. Un exemplo é IMDOS, feito por IMS Associates, Inc. para o ordenador IMSAI 8080, un clon do famoso Altair 8800.

### Compatible 
Outros SO compatibles con CP/M desenvolvéronse de forma independente e non fixeron uso do código de Digital Research. Algúns exemplos contemporáneos foron:

* Cromemco CDOS de Cromemco.
* MSX-DOS para a gama de microordenadores MSX, é compatible con CP/M e pode executar programas CP/M.
* O Epson QX-10 foi enviado cunha opción de CP/M ou compatibles TPM-II ou TPM-III.
* O SAM Coupé tiña un sistema operativo opcional compatible con CP/M-2.2 chamado Pro-DOS.
* Os ordenadores Amstrad/Schneider CPC da serie 6xx (baseados en disco) e da serie PCW foron incluídos cun paquete de discos CP/M.
* O portátil «Husky» executaba un cargador de programas baseado en ROM chamado DEMOS, que podía executar moitas aplicacións CP/M.
* ZSDOS é un BDOS substituto para CP/M-80 2.2 escrito por Harold F. Bower e Cameron W. Cotrill.
* CPMish é un novo sistema operativo compatible con FOSS CP/M 2.2 que orixinalmente non contiña ningún código DR. Inclúe ZSDOS como BDOS e ZCPR como procesador de comandos. Desde que Bryan Sparks, o presidente de Lineo, propietaria de DR, concedeu permiso en 2022 para modificar e redistribuír o código CP/M, o desenvolvedor David Given está a actualizar CPMish con algunhas partes do DR CP/M orixinal.
* LokiOS é un sistema operativo compatible con CP/M 2.2. A versión 0.9 foi publicada en 2023 por David Kitson como un exercicio de sistema operativo escrito en solitario, destinado ao *Open Spectrum Project* e inclúe código fonte para a interface de BIOS, BDOS e de liña de comandos, así como outras aplicacións e controladores compatibles. A distribución tamén inclúe código fonte DR orixinal e unha utilidade que permite aos usuarios intercambiar compoñentes do SO (por exemplo, BDOS, CCP) sobre a marcha.
* IS-DOS para microordenadores *Enterprise*, escrito por Intelligent Software.
* VT-DOS para o *Videoton TV Computer* húngaro, escrito por Intelligent Software.
* TIKO para o *Tiki 100* noruegués, primeiro chamado KP/M, era compatible con CP/M. Daquela asumida erróneamente como unha copia ilegal, foi escrita desde cero en PL/M.

### Melloras 
Algúns sistemas operativos compatibles con CP/M estenderon a funcionalidade básica ata tal punto que superan con moito o orixinal, por exemplo, o TurboDOS capaz de multiprocesamento.

### Bloque do leste 
miniatura|Captura de pantalla de SCP (clon CP/M) en execución no PC 1715.
No antigo Bloque do leste existían unha serie de derivados de CP/M-80 baixo varios nomes, incluíndo SCP (*Single User Control Program* ou Programa de control de usuario único), SCP/M, CP/A, CP/J, CP/KC, CP/KSOB, CP/L, CP/Z, MICRODOS, BCU880, ZOAZ, OS/M, COSTOS-/MSA/, Z DOS-PSA, CSOC, CSOS, CZ-CPM, DAC, HC e outros. Tamén había derivados de CP/M-86 chamados SCP1700, CP/K e K8918-OS. Os caracteres comodín de coincidencia usados ​​por Windows (? e *) baséanse nos de CP/M, do mesmo xeito que os nomes de ficheiro reservados usados ​​para redirixir a saída a unha impresora ("PRN:") e á consola ("CON:"). Os nomes de unidades A e B usábanse para designar as dúas unidades de disquete que os sistemas CP/M usaban normalmente; cando apareceron os discos duros, designábanse como C, que sobreviviu en MS-DOS como a liña de comandos `C:\>`. O carácter de control `^Z` que marca o final dalgúns ficheiros de texto tamén se pode atribuír a CP/M. Varios comandos en DOS foron modelados a partir dos comandos CP/M; algúns deles incluso levaban o mesmo nome, como DIR, REN/RENAME ou TYPE (e ERA/ERASE en DR-DOS). As extensións de ficheiro como `.TXT` ou `.COM` aínda se usan para identificar tipos de ficheiro en moitos sistemas operativos.

En 1997 e 1998, Caldera publicou algúns binarios e código fonte de CP/M 2.2 baixo unha licenza de código aberto, permitindo tamén a redistribución e modificación de ficheiros de investigación dixital recompilados posteriormente relacionados coas familias CP/M e MP/M a través do "sitio web non oficial de CP/M" de Tim Olmstead desde 1997. Tras a morte de Olmstead o 12 de setembro de 2001, a licenza de distribución foi renovada e ampliada por Lineo, que mentres tanto se convertera na propietaria deses activos de Digital Research, o 19 de outubro de 2001. En outubro de 2014, para conmemorar o cuadraxésimo aniversario da primeira presentación de CP/M, o Computer History Museum publicou versións iniciais do código fonte de CP/M.

## Notas 
## Véxase tamén 
### Outros artigos 
### Ligazóns externas 
* 
*