Kit Simulador Altair 8800 Baseado em Arduino – Construa e Programe um Computador Retrô
Componentes e Materiais
| Arduino Mega 2560 | × | 1 |
| Arduino Due (alternativa ao Mega – use apenas um dos dois) | × | 1 |
| LED (genérico) | × | 36 |
| Transistor NPN de Uso Geral | × | 36 |
| Resistor 10k Ω | × | 36 |
| Resistor 150 Ω | × | 36 |
| Chave seletora miniatura SPDT On-On (para 16 chaves de endereço + chave de alimentação) | × | 17 |
| Chave momentânea SPDT (On)-Off-(On) (para chaves de função RUN/STOP/EXAMINE...) | × | 8 |
| Chapa metálica para suporte do painel frontal | × | 1 |
| Módulo Bluetooth SparkFun BlueSMiRF Silver (opcional – permite usar qualquer dispositivo com Bluetooth como terminal serial) | × | 1 |
| Cartão microSD com adaptador SD (opcional – necessário apenas para emulação de unidade de disco) | × | 1 |
Aplicativos e Serviços Online
- Arduino IDE
- Biblioteca Arduino DueFlashStorage – Permite salvar dados na memória flash do Due (o Due não possui EEPROM). Atenção: todos os dados salvos são apagados ao reprogramar o Arduino!
- Biblioteca Arduino Due soft_uart – Implementação UART por software que permite usar quaisquer pinos como interface serial (semelhante à SoftwareSerial de outras plataformas). Os arquivos estão incluídos no código fonte do simulador com pequenas modificações para integração.
Sobre o Projeto
Se você gostaria de construir este projeto mas não quer começar do zero, confira o kit Altair-Duino de Chris Davis, que vem com todos os componentes, PCB, gabinete e um Arduino Due pré-programado!
Aqui estão algumas fotos de outras pessoas que construíram este projeto e o personalizaram:
- Alan Lowther encontrou um gabinete metálico para sua versão e conectou um Raspberry Pi para entrada/saída e síntese de voz.
- Martin Zumr fez uma caixa muito bonita totalmente em madeira.
- Chris Davis (kb0wwp) fez uma PCB e um gabinete bonito.
- Justin Davis fez um shield Altair para o Arduino Due.
Se mais alguém quiser compartilhar sua criação, avise-me e publicarei aqui. Adoraria ver a variedade de versões que as pessoas criam!
Há muito tempo pensava que seria legal ter um computador Altair 8800 para brincar. Mas Altairs funcionais são raros e caros, custando facilmente $1.500–$2.500 quando disponíveis. Existem outras opções, como altairclone.com, mas ainda custa $600, o que para mim é muito para gastar em um computador que, embora muito legal, terá uso limitado. Felizmente, Mike Douglas, criador do Altair Clone, disponibilizou à comunidade todos os documentos e software antigos que caçou e usou ao criar o clone. Graças ao trabalho de Mike, há uma riqueza de informações sobre o funcionamento interno do Altair e seus periféricos mais populares convenientemente disponível.
Em algum momento, olhei as especificações do Arduino Mega 2560 e comecei a me perguntar se ele teria pinos I/O suficientes para apenas conectar os LEDs e chaves do painel frontal do Altair e escrever meu próprio software de emulação. Acontece que o Arduino Mega tem exatamente o número certo de pinos I/O. Então, eu só tinha que fazer meu próprio clone do Altair.

Usar o Arduino Mega para rodar o simulador funcionou bem e foi simples de configurar, mas a emulação roda a apenas cerca de 25% da velocidade do Altair e só pode fornecer 6 KB de RAM emulada (embora na época isso fosse muito). A capacidade de armazenamento permanente (para salvar programas/dados criados no simulador) também é limitada, já que a EEPROM do Mega comporta apenas 4 KB.
O Arduino Due tem memória suficiente para suportar 64 KB completos de RAM emulada e roda muito mais rápido que o Mega. Além disso, o Due pode salvar dados na memória flash em tempo de execução. Isso torna possível usar qualquer parte dos 512 KB de flash não usados pelo próprio simulador para armazenamento semipermanente.
Com o Due, agora tenho um simulador Altair 8800 que roda aproximadamente na velocidade original, fornece 64 KB de RAM emulada, inclui muito software do Altair e ainda pode fornecer 32 KB de armazenamento semipermanente para carregar e salvar programas e dados no emulador.
Meu objetivo para este projeto era chegar o mais próximo possível da sensação "real" do Altair 8800 ao trabalhar com o simulador. Isso inclui fazer as luzes do painel frontal refletirem o comportamento real o máximo possível. Um critério para isso era que deveria ser possível jogar o jogo de painel frontal "Kill-the-Bit" – e é:
Acontece que a simulação é fiel o suficiente ao original para que até a demonstração de música do Altair 8800 funcione. Note que isso depende de um rádio AM captar a interferência eletromagnética gerada pela circuitaria do Altair!
Na época, a Processor Technology lançou uma pequena placa de extensão para o Altair (apenas alguns capacitores e resistores) com software acompanhante que transformava o Altair em um sistema de música respeitável (para a época). As mesmas adições podem ser feitas no Simulador (veja a documentação) o que permite tocar as músicas criadas para o sistema de música na época. Aqui está um exemplo:
Outra extensão historicamente importante do Altair foi a placa gráfica Cromemco Dazzler. Usando uma extensão de software ou hardware, o Simulador também pode emular essa placa:


Outra extensão de software/hardware permite que o Simulador emule a placa de vídeo Processor Technology VDM-1:

Claro que no final eu não possuo um Altair original, então toda informação sobre como ele funciona teve que vir de documentos e vídeos (veja agradecimentos abaixo). Pode haver algumas diferenças menores, mas no geral acho que reproduz o comportamento original bastante bem. Uma diferença conhecida (e intencional) é a luz de status HLDA: No original, ela sinaliza que a CPU reconheceu ter sido parada por um dispositivo externo. Essa funcionalidade nunca é usada no simulador, então aqui ela sinaliza que um arquivo (captura/reprodução serial/fita) está atualmente aberto.
Destaques
- Reproduz com precisão o comportamento dos elementos do painel frontal do Altair.
- Roda aproximadamente na mesma velocidade do Altair 8800 original (com Arduino Due) ou 25% da velocidade original (com Arduino Mega).
- Tamanho da RAM emulada: 64 KB (Due) ou 6 KB (Mega).
- Vários programas do Altair incluídos e facilmente carregáveis no emulador, incluindo Pong, Altair 4K BASIC (o primeiro produto da Microsoft), Altair Extended BASIC, MITS Programming System II (apenas Due), Altair Time Sharing BASIC (permite múltiplos usuários simultâneos no BASIC).
- Programas de exemplo em BASIC e Assembler incluídos no software do emulador e facilmente carregáveis no BASIC/Assembler.
- Emula uma placa 88-SIO, 88-2SIO e 88-ACR (interface de gravador de cassete de áudio). Cada dispositivo serial simulado pode ser mapeado para uma interface serial do Arduino. Por padrão, os dois mais comuns (88-SIO e 88-2SIO porta 1) são mapeados para a porta serial principal do Arduino a 115200 baud 8n1, acessível via cabo USB. Recomendo conectar um dongle Bluetooth serial aos pinos RX/TX serial. Assim, qualquer dispositivo com Bluetooth pode servir como terminal para o Altair.
- No Arduino Due, tanto a interface serial principal (USB) quanto a Serial1 (pinos 18/19) podem ser usadas simultaneamente.
- Dados enviados para cada dispositivo serial (incluindo fita ACR) podem ser capturados e reproduzidos em até 256 arquivos mantidos no armazenamento local do Arduino (EEPROM ou FLASH).
- A interface de cassete suporta comandos CSAVE/CLOAD no BASIC estendido (suporte automático, sem interação do usuário necessária). Ótimo para desenvolver seus próprios programas BASIC!
- Emula uma placa gráfica Cromemco Dazzler (precisa de hardware/software adicional, veja a documentação).
- Emula uma placa de terminal de vídeo Processor Technology VDM1 (precisa de hardware/software adicional, veja a documentação).
- Emula até 16 unidades de disco 88-DCDD (4 na configuração padrão). Emulação de disco é opcional, mas requer conectar um cartão SD ao header SPI do Arduino. Suportado apenas com Arduino Due.
- Emula um controlador de disco rígido 88-HDSK com até 4 unidades de disco rígido anexadas (1 na configuração padrão) e 4 pratos por unidade.
- Emula uma placa 88-RTC-VI com relógio em tempo real e tratamento de interrupção vetorial. Isso torna possível rodar o Altair Time Sharing Basic.
- Páginas de memória de 256 bytes podem ser salvas no armazenamento permanente e carregadas de volta na memória. Isso fornece uma maneira simples de salvar programas inseridos via chaves do painel frontal.
- Muitas configurações podem ser facilmente alteradas via editor de configuração integrado.
Importante ao usar o Due: Tudo capturado ou salvo dentro do simulador é apagado se você enviar uma nova versão do sketch para o Due. Isso ocorre porque os dados salvos são armazenados na memória flash, que é apagada ao enviar um novo sketch (o Due não tem EEPROM para armazenamento permanente). Se um cartão SD estiver conectado ao Due, os dados salvos são armazenados no cartão SD. Nesse caso, os dados não serão perdidos ao enviar um novo sketch.
Documentação
Como o simulador funciona exatamente como o Altair 8800, a documentação original do Altair (facilmente encontrada no Google) fornecerá todas as informações necessárias para operar as chaves do painel frontal.
No entanto, o simulador inclui várias funções extras e software embutido para o Altair acessíveis via chaves AUX1/AUX2 no painel frontal (essas chaves existiam mas não eram usadas no Altair original). Essa funcionalidade é explicada em um documento separado que escrevi durante o desenvolvimento do software do Simulador. O documento tem muitas páginas e as informações nele contidas sobrecarregariam esta página, então consulte o arquivo Documentation.pdf no repositório de código fonte.
Instruções de Construção
Um objetivo era usar o mínimo possível de circuitos de suporte. Tanto o Arduino Mega quanto o Due têm pinos I/O suficientes para conectar diretamente todos os elementos do painel frontal. O único circuito adicional necessário são os transistores e resistores para acionar os 36 LEDs (se os LEDs fossem conectados diretamente aos pinos de saída do Arduino e muitos ligassem ao mesmo tempo, a corrente total excederia os limites do Arduino).
Criar esquemáticos completos para este projeto seria tedioso, repetitivo (36 circuitos idênticos de driver de LED, fiação para 32 chaves) e não muito útil. Por isso, o documento de esquemáticos contém tabelas detalhadas sobre quais elementos são conectados a quais pinos do Arduino e os esquemáticos dos subcircuitos individuais (como drivers de LED). Também adicionei um arquivo Fritzing para mostrar o layout dos componentes do driver de LED na placa de tiras (stripboard).
Para criar o painel frontal, comecei com uma digitalização de alta qualidade do painel frontal do Altair (encontrada em www.vintage-computer.com) e mandei imprimir em uma gráfica em cartolina. Para o suporte traseiro (para realmente segurar chaves e LEDs no lugar), usei uma chapa de metal de 22 gauge, usando uma furadeira comum para criar os furos para LEDs e chaves. Os circuitos de driver de LED são soldados em pedaços de stripboard que são soldados diretamente aos LEDs, que por sua vez são mantidos no lugar pela chapa metálica.
O painel frontal é mantido no lugar e na vertical por uma caixa de madeira simples. A caixa não é tão profunda quanto o Altair original (porque só precisa segurar o painel frontal e o Arduino).

Para conectar a chave Liga/Desliga do painel frontal, apenas adicionei uma tomada de alimentação (igual à do próprio Arduino) à caixa, conectei-a à chave do painel frontal e desta a um plugue de alimentação que se conecta ao Arduino.
Ao usar o Arduino Due, a emulação de até 16 unidades de disco 88-DCDD pode ser ativada conectando um cartão SD à porta SPI do Due. A última página do documento de esquemáticos mostra a fiação necessária em detalhes.
Antes de enviar o sketch para o Arduino Due, certifique-se de alterar a configuração de otimização do compilador do Arduino para "performance". Por padrão, ela é definida como "size" (não sei por que, já que o Due tem 512 KB de flash). Para fazer isso, abra o arquivo
c:\Users\[usuario]\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\platform.txt
em um editor de texto e altere qualquer ocorrência de "-Os" para "-O3". Você pode pular esta etapa, mas o simulador rodará significativamente mais lento.
O software do simulador também pode rodar em um Arduino básico (Mega ou Due) sem nenhum controle de painel frontal conectado. Isso permite rodar vários dos programas incluídos (aqueles que usam principalmente o terminal serial e não os elementos do painel frontal). Para fazer isso, edite o arquivo fonte config.h e defina #define STANDALONE 1 (em vez de 0). Consulte a seção "Debugging capabilities" na documentação para ver como operar os elementos virtuais do painel frontal nessa configuração. Lembre-se, porém, que este não é o uso pretendido do simulador. Sugiro usar emuladores baseados em PC totalmente em software se você não quiser construir o hardware do painel frontal. O arquivo fonte config.h contém várias chaves que incluem/excluem funcionalidades do simulador. As configurações padrão funcionam bem, mas se você quiser ajustar o simulador, este é o lugar para começar.
Agradecimentos
Como não possuo um Altair, tive que confiar em informações da internet. Os vídeos instrutivos do Altair 8800 produzidos por Mike Douglas (deramp5113) do altairclone.com foram de grande ajuda e são muito interessantes de assistir. Além de produzir os vídeos, Mike coletou uma riqueza de manuais de hardware e software relacionados ao Altair e os disponibilizou em seu site.
(Nota: os vídeos de Mike são muito úteis para ter ideias sobre o que fazer com o simulador depois de construí-lo)
A ferramenta ADEXER de Martin Eberhard foi inestimável para depuração de baixo nível do suporte a disco rígido. Ele também escreveu dois boot loaders usados pelo simulador: o combo disk boot loader (CDBL) para inicialização de discos e mini-discos, bem como o hard disk boot loader (HDBL), que é mais curto e estável que o original.
Embora eu tenha escrito todo o código, incluindo a emulação da CPU, eu me inspirei no projeto i8080 core model para implementar eficientemente o cálculo de half-carry e a instrução DAA.
O simulador inclui algum software original para o Altair 8800. Outro grande agradecimento a Mike Douglas, que passou incontáveis horas caçando, coletando e fazendo esse software funcionar e depois disponibilizou tudo em seu site altairclone.com:
- Altair 4K BASIC (MITS 1975)
- Altair Extended ROM Basic (MITS 1975)
- Altair Time Sharing Basic (MITS 1977)
- Jogo Kill-the-Bit (Dean McDaniel, 1975)
- Jogo Pong usando painel frontal (Mike Douglas)
- 'Daisy, Daisy...' música (Steve Dompier, 1975)
- Music System (Processor Technology 1977)
- MITS Programming System II (MITS 1976)
- Altair Turnkey Monitor (MITS 1977)
- i8080 CPU Diagnostic (Microcosm Associates, 1980)
- i8080 CPU Exerciser (Frank D. Cringle 1994, Ian Bartholomew 2009)
As imagens de disco e disco rígido (incluídas no subdiretório "disks" do arquivo fonte) também foram obtidas do altairclone.com e do deramp.com (site pessoal de Mike Douglas). Estas incluem CP/M, várias versões de BASIC em disco, Altair DOS (incluindo Fortran) e mais. Novamente, Mike fez um trabalho incrível encontrando todo esse software e criando imagens de disco funcionais que podem ser usadas pela comunidade do Altair. Eu usei apenas uma seleção do software, então você pode querer ir ao altairclone.com ou deramp.com e conferir mais.
Fórum de Discussão
Chris Davis do Altairduino.com configurou um Grupo do Google para discussão de perguntas relacionadas ao Altair-Duino:
https://groups.google.com/forum/#!forum/altair-duino
Sinta-se à vontade para visitar e contribuir para a discussão!
Código
Código do Simulador Arduino Altair 8800
https://github.com/dhansel/Altair8800
Esquemáticos
Em vez de fornecer esquemáticos completos (muito repetitivos), este documento descreve quais pinos conectar a quais elementos do painel frontal e fornece esquemáticos para os subcircuitos (como circuitos de driver de LED).
Uma tentativa de mostrar o layout da stripboard à qual os LEDs estão conectados. Está um pouco apertado, mas deve ser suficiente para ver como as coisas estão conectadas. Importante: os componentes para cada LED ocupam no máximo 5 espaços na stripboard. Assim, os LEDs podem ficar próximos o suficiente para ter o painel frontal no tamanho original.
ledstrip_4OVCpRyKQS.fzz
Processo de manufatura
- Painel de Controle para Flight Simulator 2020 com Arduino Nano – Display LCD e CDI
- Construa um Spybot Controlado por Bluetooth com Arduino
- FlickMote: Controle Remoto IR por Gestos para Casa Inteligente
- DIY Arduino TV B-Gone: Controle Remoto Universal para Todas as TVs
- Construa um Relógio Mestre LED Personalizado com Alarme – Visível a 12 Metros
- Find Me: Localizador Inteligente de Objetos com Arduino e Bluetooth
- Soluções de Energia Otimizadas para Projetos Arduino
- Jogo da Velha com Arduino, Matriz LED MAX7219 e Caixa de Papelão
- Construa um Robô Quadrúpede Inteligente com Arduino: Guia Passo a Passo
- Volante Joystick Arduino Personalizado para Jogos