Montando um computador de 8 bits: como reduzir o número de chips para seis


A combinação do velho truque com a codificação de cores NTSC e o ferro moderno possibilita a montagem de uma máquina surpreendentemente eficiente.Os

sistemas de 8 bits têm algo permanentemente atraente: você pode criar um sistema autônomo poderoso o suficiente para suportar a interação adequada do usuário, mas simples o suficiente para monte e programe você mesmo. A maioria das máquinas modernas de 8 bits criadas por amadores estão ligadas a processadores clássicos que viveram na era de ouro dos computadores domésticos da década de 1980, quando milhões de TVs foram usadas como monitores. Inicialmente, a ideia era construir meu carro baseado no processador Motorola 6809da mesma época. Tentei usar o mínimo possível de chips, mas, apesar dos meus esforços, ainda precisava de 13 chips adicionais para trabalhar com RAM e transferência de dados seriais. Então pensei: e se eu usar um processador de 8 bits mais moderno? Quanto posso reduzir o número de chips que preciso?


Como resultado, montei um carro chamado Ametista . Como qualquer computador doméstico, possui um teclado embutido e pode produzir áudio e vídeo. Ele também possui uma linguagem de programação interna de alto nível para que os usuários possam escrever seus próprios programas. Consegui reduzir o número de microcircuitos para seis: CPU ATMEGA1284P , interface USB e quatro circuitos integrados simples.

O ATMEGA1284P de 2008 (ou 1284P) possui 128 kilobytes de memória flash e 16 kilobytes de RAM. Pode operar com uma frequência de até 20 megahertz. Possui controladores seriais integrados a bordo e 32 entradas / saídas digitais.



Graças à memória interna e às interfaces seriais, a necessidade de muitos chips auxiliares desapareceu. Eu poderia gerar áudio diretamente, interrompendo e aplicando um sinal na entrada / saída com diferentes frequências. Assim, aprendi a emitir um tom que, no entanto, possuía a nitidez característica de uma onda quadrada. Mas e quanto a gerar um sinal de vídeo analógico? Isso realmente exigirá equipamento especial?

Truque padrão


No final de 2018, vi um truque que Steve Wozniak usou na década de 1970 para implementar o suporte a gráficos coloridos no Apple II. Nos EUA, esse truque foi usado na transmissão em cores no sistema NTSC nos anos 50.

Inicialmente, a televisão americana era apenas preto e branco e usava o padrão NTSC bastante simples (desenvolvido pelo Comitê Nacional de Sistemas de Televisão). Para formar uma imagem na tela, um feixe de elétrons traça pontos em sua superfície, linha após linha. A amplitude do sinal de vídeo recebido determinou o brilho do feixe em qualquer local ao longo da linha. Então, em 1953, o NTSC foi atualizado para oferecer suporte à televisão em cores, mantendo a compatibilidade com as TVs em preto e branco existentes.

Os engenheiros decidiram apresentar informações sobre cores na forma de um sinal sinusoidal de alta frequência. Para isso, a subportadora foi dividida em dois componentes com desvio de fase de 90 °, cada um dos quais sofreu modulação. O resultado foi um sinal modulado em amplitude e fase. A amplitude do sinal determinou a saturação da cor. Este sinal de croma de alta frequência foi então adicionado ao sinal de luminância de baixa frequência para criar o chamado sinal de vídeo composto. Este método ainda é usado para muitos televisores e monitores mais baratos.



« »: , [ ], - , [ ]. . [ ] , : . [ ], .


Uma TV em preto e branco percebe um sinal colorido como ruído e o ignora. Mas uma TV colorida pode separar o sinal colorido do sinal de luminância usando loops de filtro.

Na década de 1970, os engenheiros perceberam que esse esquema de filtragem poderia ser muito útil para computadores domésticos, pois permite que um sinal digital retangular simule a maior parte do sinal analógico composto. O fluxo de zeros enviado pelo computador para a TV será percebido como uma tensão analógica de baixa frequência constante, ou seja, preta. O fluxo de unidades será considerado como uma tensão de alta frequência constante, ou seja, branca. Porém, com uma taxa de bits suficientemente alta, surgirão estruturas binárias mais complexas que os esquemas de filtragem passa-alto reconhecem como sinais de cores. Esse truque permitiu ao Apple II exibir até 16 cores.

No começo, pensei que precisava trocar o pino de entrada / saída muito rapidamente para gerar diretamente um sinal de vídeo. No entanto, logo percebi que, com o meu 1284P rodando a 14,318 MHz, não conseguia alterná-lo rápido o suficiente para exibir mais de quatro cores. O fato é que suas interfaces seriais internas precisariam de dois ciclos de clock para enviar um bit, o que limitaria minha frequência de clock a 7,159 MHz. O Apple II usou rápido acesso direto à memória para conectar seu chip externo à saída de vídeo, enquanto sua CPU estava ocupada com o processamento interno. Mas, como a RAM do meu computador está integrada ao chip, não pude usar essa abordagem.

Então olhei dentro das minhas gavetas e puxei quatro microcircuitos da série 7400 - dois multiplexadores e dois registradores de turno serial-paralelo. Consegui instalar oito pinos 1284P em paralelo e enviar dados deles simultaneamente para os multiplexadores e registradores de deslocamento, que os convertem em um fluxo de bits serial de alta velocidade. Assim, aprendi a gerar bits com rapidez suficiente para exibir cerca de 215 cores diferentes na tela. No entanto, eu tive que pagar por isso com meu poder de computação: o processamento de vídeo consome constantemente 75% dos recursos do processador.



Computador compacto


Ametista é um computador de placa única. Ele é montado a partir de apenas seis circuitos integrados - um processador, uma interface USB e quatro microcircuitos da série 7400, usados ​​para criar uma imagem de 215 cores. Os comutadores do teclado são soldados diretamente na placa, que também suporta áudio e quatro conexões seriais de E / S para periféricos, como controladores de jogo e dispositivos de armazenamento. Você pode escrever programas e executá-los graças à máquina virtual incorporada Forth.

Eu precisava de um ambiente de programação leve para os usuários, o que me fez escolher o Forth ao invés do tradicional Basic. A Forth é uma linguagem de programação antiga para sistemas embarcados, suporta interatividade e é capaz de compilar código com eficiência. Com isso, você pode fazer bastante usando a quantidade mínima de recursos. Como o 1284P não permite que o código de máquina compilado seja executado diretamente de sua RAM, o código do usuário é compilado no bytecode intermediário. Esse bytecode é então alimentado como entrada para uma máquina virtual executando a partir da memória flash 1284P. O código da máquina virtual foi escrito no assembler e otimizado manualmente para torná-lo o mais rápido possível.

Como engenheiro que trabalha para uma empresa que produz impressoras a laser 3D, tenho acesso a avançadas máquinas de corte a laser. Por isso, projetei e fabricei facilmente uma caixa de madeira (observei o acabamento em madeira no Atari 2600 ). Os interruptores mecânicos do teclado foram soldados diretamente a uma única placa de circuito Amethyst. Este teclado tem uma característica curiosa - a ausência da grande lacuna usual. Em vez disso, apenas um botão, modestamente localizado acima da tecla Enter.

O esquema completo, os arquivos PCB para a placa de circuito e o código fonte estão disponíveis no meu repositório GitHub . Então você pode criar sua própria Ametista ou até melhorar meu projeto. E se você descobrir como economizar mais algumas fichas?


All Articles