Sistema Operacional de Disco - Apple CP/M
Apple CP/M
Um pouco da história sobre o Apple CPM
CP/M, originalmente significando Control Program/Monitor e mais tarde Control Program for Microcomputers, é um sistema operacional de mercado de massa criado em 1974 baseado nos microprocessadores Intel 8080/85 por Gary Kildall da Digital Research, Inc. Inicialmente confinado a tarefas únicas em processadores de 8 bits e não mais que 64 KB de memória, versões posteriores do CP/M adicionaram variações multiusuário e foram migradas para processadores de 16 bits.
A combinação de computadores CP/M e barramento S-100 tornou-se um padrão inicial na indústria de microcomputadores. Essa plataforma de computador foi amplamente usada nos negócios no final da década de 1970 e em meados da década de 1980. O CP/M aumentou o tamanho do mercado tanto para hardware quanto para software, reduzindo consideravelmente a quantidade de programação necessária para instalar um aplicativo no computador de um novo fabricante.
Um importante impulsionador da inovação de software foi o advento de microcomputadores (comparativamente) de baixo custo rodando CP/M, já que programadores independentes e hackers os compravam e compartilhavam suas criações em grupos de usuários. CP/M foi eventualmente substituído pelo MS-DOS após a introdução do IBM PC em 1981.
História inicial
Gary Kildall desenvolveu originalmente o CP/M em 1974, como um sistema operacional para rodar em um sistema de desenvolvimento Intel Intellec-8, equipado com uma unidade de disquete Shugart Associates de 8 polegadas conectada por meio de uma placa controladora. Foi escrito no próprio PL/M de Kildall (Linguagem de Programação para Microcomputadores). Vários aspectos do CP/M foram influenciados pelo sistema operacional TOPS-10 do computador mainframe DEC System-10, que Kildall usou como ambiente de desenvolvimento.
Sob a direção de Kildall, o desenvolvimento do CP/M 2.0 foi realizado principalmente por John Pierce em 1978. Kathryn Strutynski, uma amiga de Kildall da Naval Postgraduate School (NPS), tornou-se a quarta funcionária da Digital Research Inc. Ela começou depurando o CP/M 2.0 e, posteriormente, tornou-se influente como principal desenvolvedora do CP/M 2.2 e do CP/M Plus. Outros desenvolvedores iniciais da base CP/M incluíram Robert "Bob" Silberstein e David "Dave" K. Brown.
CP/M originalmente significava "Control Program/Monitor", um nome que implica um monitor residente — um precursor primitivo do sistema operacional. No entanto, durante a conversão do CP/M em um produto comercial, documentos de registro de marca arquivados em novembro de 1977 deram ao produto o nome de "Control Program for Microcomputers" (Programa de Controle para Microcomputadores).
O nome CP/M segue um esquema de nomenclatura predominante da época, como na linguagem PL/M de Kildall e PL/P (Linguagem de Programação para Prime) da Prime Computer, ambas sugerindo a PL/I da IBM; e CP/CMS sistema operacional da IBM, que Kildall havia usado quando trabalhava no NPS. Essa renomeação de CP/M foi parte de um esforço maior de Kildall e sua esposa com a parceira de negócios, Dorothy McEwen para converter o projeto pessoal de Kildall de CP/M e o compilador PL/M contratado pela Intel em uma empresa comercial. Os Kildalls pretendiam estabelecer a marca Digital Research e suas linhas de produtos como sinônimo de "microcomputador" na mente do consumidor, semelhante ao que a IBM e a Microsoft juntas realizaram com sucesso ao tornar o "computador pessoal" sinônimo de suas ofertas de produtos. A Intergalactic Digital Research, Inc. foi posteriormente renomeada por meio de um registro de mudança de nome corporativo para Digital Research, Inc.
Sucesso inicial
Em setembro de 1981, a Digital Research vendeu mais de 260.000 licenças CP/M; A InfoWorld afirmou que o mercado real provavelmente era maior por causa das sublicenças. Muitas empresas diferentes produziram computadores baseados em CP/M para muitos mercados diferentes; a revista afirmou que "o CP/M está a caminho de se estabelecer como o sistema operacional para computadores pequenos". As empresas optaram por apoiar o CP/M por causa de sua grande biblioteca de software. O Xerox 820 rodava o sistema operacional porque "onde existem literalmente milhares de programas escritos para ele, seria imprudente não tirar vantagem disso", disse a Xerox. Em 1984, a Columbia University usou o mesmo código-fonte para construir binários Kermit para mais de uma dúzia de sistemas CP/M diferentes, além de uma versão genérica.
O sistema operacional foi descrito como um "barramento de software", permitindo que vários programas interagissem com diferentes hardwares de maneira padronizada. Programas escritos para CP/M eram normalmente portáveis entre máquinas diferentes, geralmente requerendo apenas a especificação das sequências de escape para controle da tela e impressora. Essa portabilidade tornou o CP/M popular, e muito mais software foi escrito para CP/M do que para sistemas operacionais executados em apenas uma marca de hardware. Uma restrição à portabilidade era que certos programas usavam o conjunto de instruções estendido do processador Z80 e não operavam em um processador 8080 ou 8085. Outro eram as rotinas gráficas, especialmente em jogos e programas gráficos, que geralmente eram específicos da máquina, pois usavam acesso direto ao hardware para obter velocidade, ignorando o sistema operacional e o BIOS (esse também era um problema comum nas primeiras máquinas DOS).
Bill Gates afirmou que a família Apple II com uma SoftCard Z-80 era a plataforma de hardware CP/M mais popular. Muitas marcas diferentes de máquinas rodavam o sistema operacional, alguns exemplos notáveis sendo o Altair 8800, o IMSAI 8080, o Osborne 1 e Kaypro luggables, e computadores MSX. O sistema compatível com CP/M mais vendido de todos os tempos foi provavelmente o Amstrad PCW. No Reino Unido, o CP/M também estava disponível nos computadores educacionais da Research Machines (com o código-fonte do CP/M publicado como um recurso educacional) e para o BBC Micro quando equipado com um coprocessador Z80. Além disso, estava disponível para a série Amstrad CPC, Commodore 128, TRS-80 e modelos posteriores do ZX Spectrum. O CP/M 3 também foi usado no NIAT, um computador portátil personalizado projetado para uso interno da AC Nielsen com 1 MB de memória SSD.
CP/M Plus
A última versão oficial de 8 bits do CP/M foi a versão 3, geralmente chamada de CP/M Plus, lançada em 1983. Seu BDOS foi projetado por Brown. Ele incorporou o gerenciamento de memória de comutação de banco do MP/M em um sistema operacional de tarefa única de usuário único compatível com aplicativos CP/M 2.2. O CP/M 3 pode usar mais de 64 KB de memória em um processador 8080 ou Z80. O sistema pode ser configurado para suportar a marcação de data de arquivos. O software de distribuição do sistema operacional também incluía um montador e um vinculador realocados. O CP/M 3 estava disponível para a última geração de computadores de 8 bits, notavelmente o Amstrad PCW, o Amstrad CPC, o ZX Spectrum +3, o Commodore 128, máquinas MSX e o Radio Shack TRS-80 Modelo 4.
Componentes do sistema CP/M
Nas versões de 8 bits, durante a execução, o sistema operacional CP/M carregado na memória possui três componentes:
- Sistema Básico de Entrada/Saída (BIOS)
- Sistema operacional de disco básico (BDOS)
- Processador de comando do console (CCP)
O BIOS e o BDOS residem na memória, enquanto o CCP pode ou não residir na memória dependendo de como é executado. Pode ser substituído por um aplicativo e recarregado automaticamente após o término da execução do aplicativo. Vários comandos transitórios para utilitários padrão também foram fornecidos. Os comandos temporários/transientes residiam em arquivos com a extensão .COM no disco.
O BIOS controla diretamente os componentes de hardware além da CPU e da memória principal. Contém funções como entrada e saída de caracteres e leitura e gravação de setores do disco.
O BDOS implementa o sistema de arquivos CP/M e algumas abstrações de entrada/saída (como redirecionamento) na parte superior do BIOS. O PCC pegava os comandos do usuário e os executava diretamente (comandos internos como DIR para mostrar um diretório ou ERA para excluir um arquivo) ou carregava e iniciava um arquivo executável com o nome fornecido (comandos transitórios como PIP.COM para copiar arquivos ou STAT.COM para mostrar vários arquivos e informações do sistema). Aplicativos de terceiros para CP/M também eram comandos essencialmente transitórios.
Os comandos BDOS, CCP e transientes padrão eram os mesmos em todas as instalações de uma determinada revisão do CP/M, mas a parte do BIOS sempre foi adaptada ao hardware específico.
Adicionar memória a um computador, por exemplo, significava que o sistema CP/M precisava ser reinstalado para permitir que programas transitórios usassem o espaço de memória adicional. Um programa utilitário (MOVCPM) foi fornecido com distribuição do sistema que permitiu realocar o código objeto para diferentes áreas de memória. O programa utilitário ajustou os endereços nas instruções de salto absoluto e chamada de sub-rotina para novos endereços exigidos pelo novo local do sistema operacional na memória do processador. Essa versão recém-corrigida poderia então ser salva em um novo disco, permitindo que os programas aplicativos acessem a memória adicional disponibilizada ao mover os componentes do sistema. Uma vez instalado, o sistema operacional (BIOS, BDOS e CCP) era armazenado em áreas reservadas no início de qualquer disco que seria utilizado para inicializar o sistema no drive A:.
Pelos padrões modernos, o CP/M era primitivo, devido às extremas restrições de tamanho do programa. Com a versão 1.0, não havia provisão para detectar um disco alterado. Se um usuário trocasse de disco sem reler manualmente o diretório do disco, o sistema gravaria no novo disco usando as informações do diretório do disco antigo, arruinando os dados armazenados no disco. A partir da versão 1.1 ou 1.2 em diante, alterar um disco e tentar gravar nele antes de seu diretório ser lido causaria a sinalização de um erro fatal. Isso evitou sobrescrever o disco, mas exigiu uma reinicialização e perda dos dados que deveriam ser armazenados no disco.
A maior parte da complexidade em CP/M foi isolada no BDOS e, em menor grau, no CCP e nos comandos transitórios. Isso significava que, ao portar o número limitado de rotinas simples no BIOS para uma plataforma de hardware específica, todo o sistema operacional funcionaria. Isso reduziu significativamente o tempo de desenvolvimento necessário para dar suporte a novas máquinas e foi uma das principais razões para o uso generalizado do CP/M. Hoje, esse tipo de abstração é comum à maioria dos sistemas operacionais (uma camada de abstração de hardware), mas na época do nascimento do CP/M (final da década de 70), os sistemas operacionais eram normalmente destinados a rodar em apenas uma plataforma de máquina e os projetos multicamadas eram considerados desnecessários.
Processador de comandos do console
O Processador de Comando do Console, ou CCP (Console Command Processor), aceitava a entrada do teclado e transmitia os resultados ao terminal. O próprio CP/M funciona com um terminal de impressão ou um terminal de vídeo. Todos os comandos CP/M devem ser digitados na linha de comando. O console geralmente exibe o prompt A>, para indicar a unidade de disco padrão atual. Quando usado com um terminal de vídeo, isso normalmente seria seguido por um cursor piscante fornecido pelo terminal. O CCP aguarda a entrada do usuário. Um comando interno do CCP, no formato letra da unidade seguida por dois pontos, pode ser usado para selecionar a unidade padrão. Por exemplo, digitar B: e pressionar
no prompt de comando altera a unidade padrão para B e o prompt de comando muda B> para indicar esta mudança.
A interface de linha de comando do CP/M foi padronizada após os sistemas operacionais da Digital Equipment, como RT-11 para o PDP-11 e OS/8 para o PDP-8. Os comandos assumem a forma de uma palavra-chave seguida por uma lista de parâmetros separados por espaços ou caracteres especiais. Semelhante a um shell Unix embutido, se um comando interno foi reconhecido, foi executado pelo próprio PCC. Caso contrário, ele tenta encontrar um arquivo executável na unidade de disco atual e (em versões posteriores) na área do usuário, carregá-lo e passar quaisquer parâmetros adicionais da linha de comando. Estes foram referidos como programas "transitórios". Após a conclusão, o CP/M recarrega a parte do CCP que havia sido substituída pelos programas aplicativos — isso dava aos programas transitórios um espaço de memória maior.
Os próprios comandos às vezes podem ser obscuros. Por exemplo, o comando para duplicar arquivos foi nomeado PIP (Peripheral Interchange Program), o nome do antigo utilitário DEC usado para esse fim. O formato dos parâmetros dados a um programa não era padronizado, de modo que não havia um único caractere de opção que diferenciasse as opções dos nomes dos arquivos. Programas diferentes poderiam usar e usaram caracteres diferentes.
O processador de comandos do console CP/M inclui DIR , ERA , REN , SAVE , TYPE e USER como comandos integrados. Comandos transitórios em CP/M incluem ASM, DDT, DUMP, ED, LOAD, MOVCPM, PIP, STAT, SUBMIT e SYSGEN.
O CP/M Plus (CP/M Versão 3) inclui DIR (exibe a lista de arquivos de um diretório, exceto aqueles marcados com o atributo SYS), DIRSYS/DIRS (lista os arquivos marcados com o atributo SYS no diretório), ERASE/ERA ( excluir um arquivo), RENAME/REN (renomear um arquivo), TYPE/TYP (exibir o conteúdo de um arquivo de caracteres ASCII) e USER/USE (alterar o número do usuário) como comandos integrados: CP/M 3 permite que o usuário abrevie os comandos internos.
Comandos transitórios em CP/M 3 incluem COPYSYS, DATE, DEVICE, DUMP, ED, GET, HELP, HEXCOM, INITDIR, LINK, MAC, PIP, PUT, RMAC, SET, SETDEF, SHOW, SID, SUBMIT e XREF.
Sistema operacional de disco básico
O Sistema operacional de disco básico, ou BDOS (Basic Disk Operating System), forne acesso a operações como abrir um arquivo, enviar para o console ou imprimir. Os programas aplicativos carregam os registradores do processador com um código de função para a operação e endereços para parâmetros ou buffers de memória e chamam um endereço fixo na memória. Como o endereço é o mesmo independente da quantidade de memória no sistema, os programas aplicativos são executados da mesma forma para qualquer tipo ou configuração de hardware.
Sistema básico de entrada e saída
O sistema básico de entrada e saída, ou BIOS (Basic Input Output System), fornece as funções de nível mais baixo exigidas pelo sistema operacional.
Isso inclui a leitura ou gravação de caracteres únicos no console do sistema e a leitura ou gravação de um setor de dados do disco. O BDOS manipula parte do buffer de dados do disquete, mas antes do CP/M 3.0 ele assumia um tamanho de setor de disco fixo em 128 bytes, como usado em disquetes de 8 polegadas de densidade única.
Como a maioria dos formatos de disco de 5,25 polegadas usava setores maiores, o bloqueio e desbloqueio e o gerenciamento de uma área de buffer de disco eram tratados por código específico do modelo no BIOS.
A personalização era necessária porque as opções de hardware não eram limitadas pela compatibilidade com nenhum padrão popular. Por exemplo, alguns fabricantes usaram um terminal de computador separado, enquanto outros projetaram um sistema de exibição de vídeo integrado. Portas seriais para impressoras e modems podem usar diferentes tipos de chips UART e endereços de porta não corrigidos.
Algumas máquinas usavam E/S mapeadas em memória em vez do espaço de endereço de E/S do 8080. Todas essas variações no hardware foram ocultadas de outros módulos do sistema pelo uso do BIOS, que usava pontos de entrada padrão para os serviços necessários para executar o CP/M, como E/S de caracteres ou acesso a um bloco de disco. Como o suporte para comunicação serial com um modem era muito rudimentar no BIOS, era prática comum para programas CP/M que usavam modems ter uma sobreposição instalada pelo usuário contendo todo o código necessário para acessar a porta serial numa máquina específica.
CP/M nos computadores compatíveis com o Apple II
Embora o sistema operacional CP/M estivesse disponível para uma grande variedade de microcomputadores, sua implementação específica para os computadores da família Apple II merece destaque especial pela engenhosidade.
Como o microprocessador dos computadores pessoais Apple II (6502/65C02/65C816) era incompatível com o sistema operacional CP/M, era necessária uma combinação de hardware e software.
Hardware:
O micro recebia uma placa de expansão (denominada Softcard) dotada de um microprocessador Zilog Z80 apto a executar o sistema operacional CP/M e todos os programas desenvolvidos para o mesmo (como o interpretador MBASIC e o editor de textos WordStar). Outro acréscimo comum era uma placa de vídeo apta a exibir 80 caracteres por linha da tela (o Apple II só exibia 40 caracteres por linha).
Software:
A implementação do CP/M para o Apple II assumia o controle de ambos os microprocessadores (6502 e Zilog Z80), ativando ora um, ora outro. A cooperação entre ambos era obtida através de um protocolo de troca de dados bastante rígido, onde cada processador trabalhava separadamente, a cada tempo, não havendo por conseguinte o processamento paralelo. O Z80 assumia o papel de microprocessador principal do computador. O 6502 entrava em ação apenas para realizar operações de entrada e saída.
Uma vez que o CP/M concentra todas as operações de entrada e saída num módulo chamado BIOS, a existência do 6502 ficava, para efeitos práticos, oculta de usuários e programadores do CP/M (todavia, não era impossível que programadores com sólido conhecimento da arquitetura do Apple II e das linguagens de máquina dos dois processadores tirassem proveito de ambos).
Com essa arquitetura obteve-se a coexistência pacífica de processadores diferentes em um único console e um único sistema operacional, aproveitando o melhor em cada processador, a saber, a grande variedade de software do CP/M (Z-80) com o firmware de entrada/saída do Apple (6502).