quarta-feira, junho 27, 2018

CP/M-80: Parte 1

O CP/M-80 foi um sistema operacional adotado largamente pelos micros "profissionais" no final dos anos 70 e para o qual uma grande quantidade de aplicações foi escrita. Neste post e nos próximos vou falar um pouco sobre os seus detalhes técnicos.

Histórico

Em 1973, Gary Kildall criou uma linguagem voltada para microprocessadores (PL/M) e desenvolveu um compilador para gerar código para o Intel 8080 (PL/M-80). Neste ano e no seguinte, criou um sistema operacional para o sistema de desenvolvimento Intellec da Intel, que usava o 8080. A Intel licenciou o compilador PL/M mas declinou o sistema operacional. Gary então fundou a "Intergalactic Digital Research" (mais tarde o Intergalactic oi retirado do nome) para comercializar o sistema, que chamou de CP/M.

Nos anos seguintes o CP/M foi sendo aperfeiçoado e versões semelhantes foram feitas para outros processadores, como o 68000, o Z8000 e o 8086. A versão mais bem sucedida foi a versão 2.2 para o 8080, que passou a ser conhecida como CP/M-80.

Com o ocaso dos micros de 8 bits, a ascensão do PC IBM e a prevalência do MS-DOS sobre o CP/M-86, o CP/M foi caindo em desuso.

Estrutura Básica

O hardware mínimo para rodar o CP/M-80 é:
  • Processador 8080 ou compatível (8085, Z80 e outros)
  • 16K de Ram a partir do endereço 0
  • Uma unidade de disco (originalmente disquete de 8 ou 5 1/4 polegadas)
  • Um terminal alfanumérico com suporte ao código ASCII
Uma vez que o 8080 (e compatíveis) inicia a execução no endereço 0 e o CP/M-80 deseja Ram nesta posição, tipicamente o hardware possui algum esquema de chaveamento da memória no endereço 0 entre Ram e Rom. Quando o computador é ligado, a Rom é mapeada no endereço 0 e é executado um bootloader que carrega o primeiro setor do disquete para a Ram, mapeia a Ram para o endereço 0 e desvia a execução para lá.

O núcleo do sistema, que foi todo escrito em assembler, está dividido em três partes:
  • O BIOS, que é um pequeno conjunto de rotinas específicas para o hardware
  • O BDOS, que é o núcleo do sistema propriamente dito e usa o BIOS para interagir com o hardware
  • O CCP, que é o interpretador de comandos
Em termos de memória, os primeiros 256 bytes são usados para interface entre a aplicação e o SO. Programas são carregados a partir do endereço 0x100. BIOS e BDOS ficam no final da memória. A região de 0x100 até o núcleo do CP/M é chamada de TPA ("Transisent Program Area").

O CCP ("Command Console Processor") fica no final da TPA. Quando uma aplicação finaliza, o BDOS verifica se o CCP foi sobrescrito, se sim o recarrega do disquete.

Faz parte do CP/M-80 vários comandos, a maioria escritos em PL/M. Alguns anos atrás os fontes foram tornados código livre (podem ser baixados daqui). Entretanto, a compilação do CP/M era feita em computadores PDP ou VAX usando um assembler e um compilador PL/M criados pela própria Digital Research, o que torna difícil gerar o executável a partir deles. Vários fontes gerados por disassembly circulam por aí, como no livro abaixo.


Nos próximos posts vamos ver mais detalhes.

Nenhum comentário: