CP/M

CP/M
DesenvolvedoresDigital Research, Inc, Gary Kildall
Lançamento estável
3.1 (1983)
Escrito emPL/M
PlataformaIntel 8080, Intel 8085, Zilog Z80, Zilog Z8000, Intel 8086, Motorola 68000
LicençaLicença BSD
Websitehttp://www.digitalresearch.biz/CPM.HTM

CP/M (Control Program/Monitor ou Control Program for Microcomputers: "programa de controle para microcomputadores") é um sistema operacional de disco originalmente criado por Gary Kildall da Digital Research para microcomputadores baseados em microprocessadores Intel 8080/85. Inicialmente, seu uso era limitado a um único usuário/tarefa em processadores de 8 bits com pouco mais de 64 kB de RAM, embora versões posteriores tenham adicionado recursos multiusuário/multitarefa e tenham sido adaptadas para CPUs de 16 bits.

A combinação do CP/M com computadores pessoais e o barramento S-100, iniciada com o MITS Altair 8800, foi um dos primeiros padrões da indústria para microcomputadores e foi amplamente utilizada desde a década de 1970 até meados da década de 1980. Ao reduzir drasticamente a quantidade de programação necessária para instalar um aplicativo num computador de um novo fabricante, o CP/M impulsionou os mercados tanto de software quanto de hardware.

Modelo de hardware

Computador "Sanco 8001" com o CP/M 2.2 em execução.

Um sistema CP/M de 8 bits, geralmente contém os seguintes componentes:

O único hardware compatível com CP/M, na versão distribuída pela Digital Research, era o Intel 8080 Development System. Os fabricantes de sistemas compatíveis com CP/M adaptavam partes do sistema operacional para suas próprias combinações de memória instalada, unidades de disco e entrada de console. O CP/M também podia rodar em sistemas baseados no processador Zilog Z80, uma vez que o Z80 era capaz de executar código do 8080. Embora o CP/M não fosse capaz de executar nenhuma das instruções específicas do Z80, muitos aplicativos foram programados para máquinas CP/M baseadas nesse processador.

Em muitas máquinas, o bootstrap era um programa mínimo armazenado em ROM; em outras, esse programa precisava ser inserido diretamente na memória por meio de um painel frontal sempre que o sistema operacional era carregado.

O CP/M utilizava um conjunto ASCII de 7 bits (128 caracteres). Os outros 128 caracteres possíveis em um conjunto de 8 bits não eram padronizados. Por exemplo, um modelo da Kaypro os utilizava para armazenar caracteres do alfabeto grego, enquanto as máquinas Osborne usavam o oitavo bit para indicar o caractere de sublinhado. Sistemas CP/M internacionais frequentemente utilizavam o padrão ISO 646 para adaptar conjuntos de caracteres, substituindo certos caracteres ASCII por caracteres de idiomas locais, em vez de adicioná-los além do limite de 7 bits.

Componentes do sistema operacional

Nas versões de 8 bits, o kernel do CP/M era dividido em três componentes: o Console Command Processor (ou CCP), o Basic Disk Operating System (ou BDOS) e o Basic Input/Output System (ou BIOS). O CCP e o BDOS eram idênticos em todas as instalações de uma determinada versão do CP/M, mas o componente BIOS era sempre adaptado ao hardware específico. Adicionar memória a um computador, por exemplo, significava que o sistema CP/M precisava ser reinstalado. Uma vez instalado, o sistema operacional era armazenado em espaços reservados no início de qualquer disco utilizado para inicializar o sistema. Na inicialização, o carregador de inicialização (boot loader) carrega o sistema operacional a partir do disquete na unidade A:.

Para os padrões modernos, o CP/M era primitivo devido a restrições extremas quanto ao tamanho dos programas. Na versão 1.0, a troca de disquete não era detectada. Se um usuário trocasse os discos sem ler novamente o diretório de arquivos de forma manual, o sistema sobrescreveria o novo disco utilizando as informações de diretório do disco antigo, destruindo os dados armazenados no novo disquete. A partir da versão 1.1 ou 1.2, esse problema foi amenizado: se alguém trocasse os discos sem ler o diretório do novo disco e tentasse gravar nele, o sistema operacional emitia um aviso de erro, impedindo a sobrescrita, mas exigindo uma reinicialização (o que levava apenas alguns segundos, mas resultava na perda de todos os dados na memória).

A maior parte da complexidade do CP/M estava isolada no BDOS e, em menor grau, no CCP. Isso significava que, ao portar o número limitado de comandos simples do BIOS para uma plataforma de hardware específica, todo o sistema operacional passava a funcionar. Tal característica reduziu significativamente o tempo de desenvolvimento necessário para dar suporte a novas máquinas e foi uma das principais razões para a ampla utilização do CP/M. Hoje, esse tipo de abstração é comum à maioria dos sistemas operacionais, mas, na época em que o CP/M foi criado, os sistemas operacionais eram tipicamente projetados para rodar numa única plataforma de hardware, e sistemas multiplataforma eram considerados desnecessários.

Processador de Comandos do Console

O Console Command Processor (CCP, ou Processador de Comandos do Console) recebe entradas do teclado e transmite resultados para o terminal. O CP/M pode operar com uma impressora ou com um terminal de vídeo. Todos os comandos do CP/M estão integrados ao interpretador de comandos. O console normalmente exibe o prompt A> na tela para indicar a unidade de disco padrão atual. Quando utilizado com um terminal de vídeo, esse prompt aparece ao lado de um cursor piscante — fornecido pelo terminal —, indicando que o CCP está aguardando a entrada do usuário.

Um comando interno do CCP — a letra da unidade seguida por dois-pontos — permite selecionar a unidade padrão. Por exemplo, se você digitar B: e pressionar a tecla Enter no prompt de comando, a unidade padrão mudará para B, e o próprio interpretador exibirá essa alteração.

A linha de comando do CP/M foi padronizada com base nos sistemas operacionais da Digital Equipment, como o RT-11 para o PDP-11 e o OS/8 para o PDP-8. Os comandos consistiam em palavras-chave seguidas por uma lista de parâmetros separados por espaços ou caracteres especiais. Se o CCP reconhecesse um comando interno, ele o executava. Caso contrário, tentava localizar o arquivo executável no disco ou na área do usuário (nas versões posteriores), carregá-lo e passar-lhe quaisquer parâmetros adicionais da linha de comando. Esses programas eram conhecidos como "programas transitórios". Após a conclusão, o CP/M recarregava a parte do CCP que havia sido sobrescrita pelos programas transitórios, disponibilizando assim mais memória para esses programas.

Às vezes, os comandos eram confusos. Por exemplo, a instrução para duplicar arquivos era PIP (Peripheral-Interchange-Program), o nome do antigo utilitário da DEC usado para essa finalidade. O formato dos parâmetros do programa não era padronizado; portanto, não havia uma "opção de caractere" única para distinguir as opções do nome do arquivo.

Comandos internos

Os comandos internos estão integrados ao processador de comandos (CCP) e são carregados na RAM durante a inicialização do sistema.

Comando Descrição
DIR Lista os nomes dos arquivos na unidade de disco atual.
unidade: Muda a unidade de disco (A: por padrão).
ERA arquivo Elimina os arquivos especificados.
TYPE arquivo Mostra o conteúdo de um arquivo na unidade de disco.
arquivo Executa um arquivo .COM.
SAVE n arquivo.com Salva o conteúdo da memória num arquivo.
USER n Muda o espaço do usuário (0-15).
REN novonome.nnn=nomeantigo.nnn Renomeia o arquivo especificado.

Comandos externos

Os comandos externos (ou transitórios) são armazenados em disquetes (ou discos rígidos) para uso posterior.

Comando Descrição
ASM Carrega o assembler CP/M e monta o programa especificado a partir do disco.
DDT Carrega o depurador do CP/M e inicia a execução.
DUMP Descarrega o conteúdo de um arquivo en hexadecimal.
ED Carrega e executa o editor de texto do CP/M.
LOAD Carrega o arquivo no formato hexadecimal do código de máquina Intel e gera um arquivo executável que pode ser carregado na memória. Este programa se torna um novo comando, sob o CCP.
MOVCPM Gera o sistema CP/M para um tamanho de RAM específico.
PIP Carrega o programa Peripheral Interchange Program para operações de transferência entre periféricos e discos.
STAT Exibe o espaço de armazenamento restante (em bytess) no disco atual, fornece informações estatísticas sobre determinados arquivos e exibe ou altera o mapeamento de dispositivos.
SUBMIT Processa un arquivo de comandos em lote.
SYSGEN Cria un disco de inicialização CP/M.

Sistema Operacional de Disco

O Basic Disk Operating System (BDOS, ou Sistema Operacional de Disco Básico) fornece acesso a operações como abrir um arquivo, sair do console e imprimir. Os programas carregam os registradores do processador com o código de função para a operação e os endereços dos parâmetros ou buffers de memória, e solicitam um local fixo na memória. Como o endereço é o mesmo independentemente da quantidade de memória no sistema, os programas são executados da mesma maneira para qualquer tipo ou configuração de hardware.

Sistema Básico de Entrada/Saída

Caixa do CP/M 2.2

O Sistema Básico de Entrada/Saída (Basic Input Output System ou BIOS) fornece acesso às funções de baixo nível exigidas pelo sistema operacional. Essas funções incluem a leitura ou escrita de caracteres individuais no terminal do sistema e a leitura ou escrita de um setor de dados no disco. O BDOS lida com parte do buffer de dados do disco, mas antes do CP/M 3.0, ele assumia um tamanho de setor de disco fixo de 128 bytes, como o usado em disquetes de densidade única de 8 polegadas. Como a maioria dos formatos de disco de 5,25 polegadas utiliza setores grandes, o bloqueio e o desbloqueio — bem como o gerenciamento da área de memória do disco — eram realizados por meio de código específico na BIOS.

A personalização era necessária porque as opções de hardware não estavam limitadas pela compatibilidade com nenhum padrão amplamente conhecido. Por exemplo, alguns fabricantes utilizavam o terminal de computador como uma unidade independente, enquanto outras versões incorporavam um sistema de exibição de vídeo integrado. Portas seriais para impressoras e modems podiam utilizar diferentes tipos de chips UART, e os endereços das portas não eram fixos. Algumas máquinas utilizavam E/S mapeada em memória em vez do espaço de endereçamento de E/S do 8080. Todas essas variações de hardware permanecem ocultas dos demais módulos do sistema graças ao uso da BIOS, que utiliza pontos de entrada padronizados para os serviços necessários à execução do CP/M, como E/S de caracteres ou acesso a blocos de disco. Como o suporte para comunicação serial com um modem era muito rudimentar na BIOS ou podia estar completamente ausente, era prática comum que os programas CP/M que utilizavam modems tivessem uma sobreposição de usuário instalada, contendo todo o código necessário para acessar uma determinada porta serial na máquina.

Sistema de arquivos

Os nomes dos arquivos consistiam em até oito caracteres, seguidos por um ponto e uma extensão de arquivo de até três caracteres (formato de nome de arquivo "8.3"). A extensão geralmente identificava o tipo de arquivo. Por exemplo, .COM indicava um arquivo binário executável e .TXT indicava um arquivo contendo texto ASCII.

Cada unidade de disco era identificada por uma letra. Normalmente, as duas unidades de disco eram identificadas como unidades A: e B:. Para se referir a um arquivo em uma unidade específica, a letra da unidade era precedida pelo nome do arquivo, separados por dois pontos, por exemplo, A:FILE.TXT. Sem a letra da unidade como prefixo, o padrão era usar os arquivos na unidade atual (por exemplo, um programa em execução na unidade B acessará arquivos na unidade B, a menos que os nomes dos arquivos sejam precedidos por uma letra de unidade).

O tamanho do arquivo era especificado como o número de registros de 128 bytes (correspondentes diretamente aos setores do disco em unidades de 8 polegadas) ocupados por um arquivo no disco. Não havia uma maneira padronizada de especificar o tamanho exato dos arquivos em bytes. O sistema operacional mantinha o tamanho do arquivo atualizado no bloco de controle de arquivo (FCB). Como muitos aplicativos (como editores de texto) tratam arquivos como sequências de caracteres, em vez de sequências de registros, por convenção, os arquivos de texto terminam com o caractere CTRL-Z (ASCII SUB, hexadecimal 1A). Determinar o fim de um arquivo de texto consistia, portanto, em examinar o último registro do arquivo em busca do caractere CTRL-Z de término. Isso também significava que inserir um caractere CTRL-Z no meio de um arquivo geralmente tinha o efeito de truncar o conteúdo de texto do arquivo.

Não havia suporte para modificação da data do arquivo (marca temporal), embora algumas versões posteriores do CP/M tenham adicionado esse recurso como uma extensão.

O CP/M 2.2 não possuía subdiretórios na estrutura de arquivos, mas contava com 16 "espaços de usuário" para organizar arquivos em disco. O conceito de espaço de usuário tornou a versão de usuário único do CP/M mais compatível com sistemas MP/M multiusuário. Uma correção comum para o CP/M e seus derivados consistia em tornar um espaço acessível ao usuário independentemente do espaço de usuário configurado. Um novo comando, 'USER', permitia ao usuário alterar essa área para um valor entre 0 e 15. 'USER 0' era o valor padrão. Se você alternar para outro usuário, por exemplo, USER 1, o conteúdo salvo em disco por esse usuário estará disponível apenas para o USER 1; o USER 2 não poderá vê-lo nem acessá-lo. Como o CP/M era um sistema operacional de usuário único, a instrução USER tinha pouca segurança; nada impedia que qualquer usuário acessasse qualquer um dos outros 16 espaços de usuário. O recurso de espaço de usuário provavelmente era pouco útil em disquetes, mas era mais útil para organizar arquivos em máquinas equipadas com discos rígidos de grande capacidade.

Alguns tipos de arquivo CP/M

Extensão Significado
ASM Código-fonte em linguagem assembly
PRN Arquivo de impressão
HEX Código de máquina
BAS Código-fonte BASIC
INT Código intermediário
COM Arquivo executável
PLI Código-fonte PL/1
REL Módulo relocável
TEX Arquivo de origem TeX
BAK Cópia de segurança (ED)
SYM Ficheiro de símbolos SID
$$$ Arquivo temporário

Memória livre para programas

Na versão original do CP/M para os processadores 8080, 8085 e Z80, a memória de leitura/gravação entre o endereço hexadecimal 0100 e a posição imediatamente anterior ao endereço armazenado em 0006H (o endereço mais baixo no BDOS) é a Transient Program Area (TPA, ou "Área de Programas Transitórios") disponível para os programas de aplicação CP/M. Embora todos os processadores Z80 e 8080 pudessem usar 64 kB de memória, a quantidade disponível para os programas podia variar dependendo do projeto do computador específico. Alguns computadores utilizam uma grande parte do espaço de endereçamento para outras tarefas, como a ROM do BIOS ou a memória de vídeo. Portanto, alguns sistemas tinham mais memória disponível para TPA do que outros. A comutação de bancos de memória era uma técnica comum que permitia aos sistemas ter uma TPA alta usando ROM e memória de vídeo, se necessário. O CP/M 3.0 também permitia que partes do BDOS fossem executadas no banco de memória de troca (swap).

Versões do CP/M

Data Versão
1973 CP/M 1.0
- CP/M 1.4
1979 CP/M 2.0
- CP/M 2.2
1982 CP/M 3.0 (8 bits)
- CP/M 3.1 (16 bits)

Histórico

O início e o auge do CP/M

O nome

Em 1974, o CP/M era um projeto pessoal de Gary Kildall, sob o nome Control Program/Monitor. Durante o processo de transformação do CP/M em um produto comercial, os documentos de registro de marca depositados em novembro de 1977 o listavam sob o nome Control Program for Microcomputers. O nome reflete a convenção de nomenclatura predominante na época — observada em linguagens como PL/M (Programming Language for Microcomputers), da Intel, e PL/P (Programming Language for Prime), da Prime Computer, ambas desenvolvidas por Kildall — e faz alusão aos sistemas operacionais PL/I e CP/CMS da IBM. Kildall havia utilizado esses sistemas enquanto trabalhava na Naval Postgraduate School e eles — assim como o TOPS-10 — apresentavam semelhanças claras com a interface de usuário e o sistema de arquivos do CP/M.

Essa mudança de nome do CP/M fez parte de um esforço mais amplo de Kildall e de sua esposa e sócia, Dorothy McEwen, para transformar os projetos pessoais de Kildall — o CP/M e o PL/M — em um empreendimento comercial. O casal Kildall buscou, com perspicácia, estabelecer a marca Digital Research e suas linhas de produtos como sinônimos de "microcomputador" na mente dos consumidores, assim como a IBM e a Microsoft conseguiram, mais tarde, tornar o termo "computador pessoal" em sinônimo dos produtos oferecidos por ambas as empresas. Posteriormente, a razão social Intergalactic Digital Research, Inc. foi alterada para Digital Research, Inc.

Portabilidade

Placa de expansão para o Apple II, com processador Z80.

O CP/M era descrito como um "barramento de software", que permitia que vários programas interagissem com diversos hardwares de forma padronizada. Os programas escritos para CP/M eram tipicamente portáveis entre diferentes máquinas, geralmente exigindo apenas a especificação de sequências de escape para controle de tela e impressora. Essa portabilidade tornou o CP/M muito popular, e muito mais software foi escrito para CP/M do que para sistemas operacionais que podiam ser executados em uma única marca de hardware. Uma restrição à portabilidade era que certos programas usavam o conjunto de instruções do processador Z80, que não podia ser executado em processadores 8080 ou 8085.

Diversas marcas de máquinas utilizavam o CP/M, sendo alguns exemplos notáveis ​​o Altair, o IMSAI 8080, o Osborne 1, os portáteis Kaypro e os microcomputadores MSX. Até mesmo o Apple II conseguia executar o CP/M quando uma placa Z80 adicional era instalada. O sistema padrão compatível com CP/M ajudou a estabelecer o recorde de vendas de todos os tempos, provavelmente com o Commodore 128 como hardware, embora poucas pessoas realmente utilizassem nele os recursos do CP/M. No Reino Unido, o CP/M também estava disponível para o BBC Micro, equipado com um coprocessador Z80. Ele também funcionava no famoso sistema de processamento de texto Amstrad PCW e estava disponível para a série Amstrad CPC e modelos posteriores do ZX Spectrum.

Ver também

Referências

  1. ↑ Pavroo (4 de julho de 2022). «CP/M». ArchiveOS (em inglês). Consultado em 19 de janeiro de 2026
  2. ↑ «O sistema operacional Digital Research CP/M de 1974». MCC. 24 de maio de 2024. Consultado em 19 de janeiro de 2026
  3. ↑ Digital Research (janeiro de 1978). An Introduction to CP/M Features and Facilities (PDF) (em inglês). [S.l.: s.n.]
  4. ↑ «CP/M 2.0 to be released soon» (PDF). BYTE (em inglês): 115. Setembro de 1979. Consultado em 19 de janeiro de 2026
  5. ↑ Eberhard, Martin (20 de janeiro de 2011). «Altair Software Development using CP/M» (PDF) (em inglês). Consultado em 19 de janeiro de 2026
  6. ↑ Roman Czyborra (1998). «ISO-646: First attempts to internationalize the 7bit code» (em inglês). Consultado em 18 de novembro de 2008
  7. 1 2 3 4 5 6 7 8 9 Oscar Vermeulen (2003). «CP/M Internals» (em inglês). Consultado em 19 de novembro de 2008. Cópia arquivada em 11 de janeiro de 2010
  8. ↑ Johnson, Herb (2011). «Discussion of early CP/M and IMDOS». RetroTechnology (em inglês). Consultado em 20 de janeiro de 2026
  9. 1 2 «CP/M Console Command Processor Instructions». primrosebank.net (em inglês). 8 de abril de 2023. Consultado em 26 de janeiro de 2026
  10. ↑ «File Names» (em inglês). 15 de fevereiro de 2009. Consultado em 30 de janeiro de 2026. Cópia arquivada em 6 de março de 2016
  11. 1 2 «CP/M Builtin Commands». discordia.org.uk (em inglês). Consultado em 30 de janeiro de 2026. Cópia arquivada em 29 de novembro de 2025
  12. ↑ «CP/M 2 System Interface» (em inglês). Consultado em 30 de janeiro de 2026
  13. ↑ «CP/M 2.2 disc formats» (em inglês). Consultado em 30 de janeiro de 2026. Cópia arquivada em 29 de janeiro de 2012
  14. ↑ «Understanding disk images for the CP/M emulation» (em inglês). Consultado em 12 de fevereiro de 2010. Cópia arquivada em 29 de setembro de 2010. Under CP/M 3 and MP/M 2 you can execute the programs from other user areas with i:program, because this OS's honor the SYS attribute for files in user area 0 appropriate. CP/M 2 doesn't support this, which makes it uncomfortable to use user areas under this OS.
  15. ↑ «CP/M Operating System» (em inglês). 4 de março de 2004. Consultado em 31 de janeiro de 2026
  16. ↑ «The origin of CP/M's name» (em inglês). Consultado em 16 de janeiro de 2009. Cópia arquivada em 11 de outubro de 2007
  17. ↑ Herbert R. Johnson (8 de março de 2012). «Early CP/M, PL/M and DRI history» (em inglês). Consultado em 10 de março de 2012
  18. ↑ «CP/M and Digital Research Inc. (DRI) History» (em inglês). Consultado em 16 de janeiro de 2009. O CP/M tornou-se o "barramento de software" para os novos microcomputadores baseados em Intel das décadas de 1970 e 1980.
  19. ↑ Thom Hogan (novembro de 1983). Creative Computing, ed. «From backyard to big time; the history of CP-M» (em inglês). 9 (11). Consultado em 16 de janeiro de 2009. Cópia arquivada em 24 de maio de 2012
  20. ↑ «Commodore and CP/M» (em inglês). Consultado em 14 de maio de 2009. Cópia arquivada em 8 de março de 2007

Ligações externas

Ícone de esboço Este artigo sobre informática é um esboço. Você pode ajudar a Wikipédia expandindo-o.