# CP/M

CP/M (Control Program for Microcomputers) fue un sistema operativo monousuario y monotarea desarrollado por Gary Kildall para el microprocesador Intel 8080 (los Intel 8085 y Zilog Z80 podían ejecutar directamente el código del 8080, aunque lo normal era que se entregara el código recompilado para el microprocesador de la máquina). Se trataba del sistema operativo más popular entre las computadoras personales en los años 1970. Aunque fue modificado para ejecutarse en un IBM PC, el hecho de que IBM eligiera MS-DOS, al fracasar las negociaciones con Digital Research, hizo que el uso de CP/M disminuyera hasta hacerlo desaparecer. CP/M originalmente significaba Control Program/Monitor y más tarde se cambió su nombre por Control Program for Microcomputers (en la época, la barra inclinada "/" tenía el significado de "diseñado para"; no obstante, Gary Kildall redefinió el significado del acrónimo poco después). CP/M se convirtió en un estándar de industria para los primeros micro-ordenadores.

## Historia

CP/M comenzó como un proyecto de Gary Kildall alrededor de 1974. En 1977 su autor decidió llevar su sistema operativo al terreno comercial. Así, Kildall fundó la compañía Intergalactic Digital Research, Inc que hoy se conoce como Digital Research Corporation. En este momento Kildall redefinió el significado del acrónimo por Control Program for Microcomputers, es decir, Programa de control para micro-ordenadores. Esta decisión fue meramente comercial ya que todo lo que sonara a "micro" estaba de moda en la época. El sistema operativo se distribuía originalmente en disquetes de ocho pulgadas para la familia de microprocesadores Intel 8080, que también era compatible con el microprocesador Zilog Z80 (muy popular en aquellos tiempos). Desde entonces, CP/M fue adaptándose con bastante éxito a la evolución del hardware. Dicha evolución no era lo vertiginosa que es hoy día. Pronto se convirtió en el sistema operativo de elección en cientos de micro-ordenadores. Los primeros programas de uso personal, el procesador de texto WordStar y la base de datos dBase, fueron originalmente escritos para CP/M. Con la llegada de los primeros microprocesadores de 16 bits, CP/M tuvo que sufrir una completa adaptación, abandonando la compatibilidad con los anteriores microprocesadores de 8 bits. Por este motivo, CP/M para 16 bits se denomina familia CP/M-86, y CP/M para 8 bits como familia CP/M-80. Consta de CP/M-86 para microprocesadores Intel 8086, CP/M-68k para microprocesadores Motorola 68000, así como versiones para Zilog Z8000. Se desarrollaron versiones multitarea y multiusuario, tales como MP/M, también para 8 y 16 bits.

### Controversia frente a MS-DOS

Ya en los años 1980 los micro-ordenadores cayeron en popularidad a favor de los ordenadores personales de 16 bits. CP/M estuvo a punto de convertirse en el sistema operativo para estas máquinas. De hecho, IBM ofertaba para su IBM PC tanto CP/M como el sistema operativo MS-DOS, que se basaba parcialmente en el propio CP/M. Sin embargo, la política de precios y de distribución perjudicó a CP/M en favor de MS-DOS. En muy poco tiempo MS-DOS se impuso entre los usuarios en detrimento de CP/M. La última versión de CP/M-86 logró importantes mejoras en términos de rendimiento y facilidad de uso. Dada su similitud con MS-DOS cambió su nombre por DOS Plus, lo que finalmente llevó a Digital Research a la creación de DR-DOS, un clon de MS-DOS. El escritor y periodista Sir Harold Evans publicó un libro titulado "They Made America: From the Steam Engine to the Search Engine: Two Centuries of Innovators", donde afirma que Kildall fue el verdadero cerebro detrás de ambos sistemas operativos, ya que, en su opinión, Tim Paterson copió las ideas de CP/M en QDOS, sistema operativo que se convirtió en MS-DOS tras su venta a Bill Gates. Tim Paterson demandó al periodista y a su editorial por tales afirmaciones y, en 2007, el tribunal falló a favor de Harold Evans reconociendo la "paternidad" de Gary Kildall.

## Comparación de códigos fuente entre CP/M y DOS

En 2016, Bob Zeidman de Zeidman Consulting, comparó los códigos fuente del CP/M de Digital Research Inc. y del DOS de Tim Paterson (el desarrollador que fue contratado originalmente por Microsoft para escribir el DOS) para determinar si el código fuente original del DOS había sido copiado del código fuente del CP/M tal como se había rumoreado durante muchos años.
Si se comparan los comandos de DOS y CP/M, sólo unos pocos coinciden parcialmente. De hecho, hay más similitudes entre los comandos de DOS y OS/8, que entre los comandos de DOS y CP/M. Esto se debe a que todos estos comandos consisten en palabras en inglés que describen directamente la acción a realizar.
Sin embargo, si se analizan las llamadas al sistema en ambos sistemas operativos, se ve claramente que las llamadas al sistema incluidas en DOS fueron copiadas de las llamadas al sistema del CP/M. Dada la cantidad de números idénticos que representan las mismas funciones, se hace evidente que Tim Paterson se basó en el manual de CP/M cuando escribió DOS.
La conclusión de Zeidman es que DOS no copió ningún código de CP/M. Sin embargo, un número sustancial de las llamadas al sistema sí fueron copiadas. Según Zeidman, Digital Research podría haber presentado una demanda legítima de derechos de autor contra Microsoft por haber copiado un número considerable de llamadas al sistema. Si ese hubiera sido el caso, Microsoft podría haber alegado defensa, ya que el hecho de que bastantes de los comandos del sistema utilizaran los mismos números no redujo el mercado de CP/M.

## Características

El éxito de CP/M se debió a dos características fundamentales: portabilidad y diseño.

### Portabilidad

CP/M permitía que diferentes programas interactuaran con el hardware de una manera estandarizada. Esta característica, evidente hoy día en un sistema operativo, no lo era tanto en aquel momento. Los programas escritos en CP/M eran portables a cualquier micro-ordenador aun con microprocesadores distintos (exceptuando programas que utilizaban el conjunto de instrucciones extendido del Z80). El único requisito era la utilización correcta de las secuencias de escape para pantalla e impresora.

### Diseño

CP/M presentaba un innovador diseño modular compuesto por tres subsistemas:
* CCP (command control processor, estándar)
* BDOS (basic disk operating system, estándar)
* BIOS (basic input/output system, dependiente de la máquina)
CCP es un intérprete de comandos que permitía introducir mandatos y sus parámetros separados por espacios. Unos pocos de estos mandatos eran internos al propio CCP, pero si el mandato no era reconocido, se buscaba un programa con el mismo nombre en el directorio actual del disco.
CCP permitía traducir los mandatos de usuario en un conjunto de instrucciones de alto nivel destinadas a BDOS. Asimismo, los programas podían comunicarse con BDOS para realizar tareas abstractas tales como "abrir fichero". En aquellos años este tipo de abstracción era toda una novedad. Posteriormente, BDOS traducía dichas instrucciones en llamadas a la BIOS de la computadora.
La mayoría de la complejidad de CP/M se encontraba oculta en BDOS. De esta manera, bastaban unas pocas adaptaciones en la BIOS para que una computadora pudiera utilizar CP/M. El esfuerzo necesario para soportar nuevas máquinas era muy pequeño, lo que contribuyó al éxito de este sistema operativo.

### Publicación de su código fuente

El código fuente de las versiones 1.1, 1.3, 1.4 y 2.0 fueron publicadas el 1 de octubre de 2014 restringidas a su uso no comercial.

## Micro-ordenadores

Existen cientos de micro-ordenadores que han utilizado CP/M. A continuación se mencionan los más importantes desde el punto de vista histórico:
* MITS Altair 8800
* Amstrad CPC 464, 664 y 6128
* Amstrad PCW 8256, 8512, 9512
* Apple II
* Atari ST
* BBC Micro
* Commodore 64 y Commodore 128
* Grundy NewBrain
* IBM PC
* MSX
* VTech Laser 700
* Spectravideo SVI-328
* ZX Spectrum + Interface Beta Disk
* ZX Spectrum +3