Um dos problemas em projetos retrô é conseguir componentes antigos. Alguns componentes dos anos 80 ainda são fabricados até hoje (como o 6502). No caso de memórias, é comum usar alternativas mais recentes (que oferecem maior capacidade e são mais fáceis de usar). Para o resto, o que se encontra são peças oferecidas como "old new stock" - teoricamente, peças novas que estavam encalhadas em estoques. Infelizmente existem muitos vendedores sem escrúpulos que vendem peças defeituosas, extraídas de placas antigas ou mesmo falsificadas (alterando a marcação do chip).
Um componente-chave de vários projetos (como os do Grant Seale) é a MC6850. Vou descrever aqui um projeto que fiz para testar as peças que comprei.
A ACIA MC6850
A Motorola desenvolveu o chip MC6850 na década de 1980. Trata-se de um periférico para microprocessadores de 8 bits. Ela fornece formatação e controle de dados para interligar comunicações seriais assíncronas a um barramento de dados do microprocessador.
Do lado da interface com o microprocessador, a MC6850 possui:
- A via de dados bidirecional de 8 bits
- Um sinal que indica se será feita uma leitura ou escrita
- Um sinal para selecionar entre os registradores de dados e os de controle/status
- Três sinais de seleção, que podem ser usados para decodificar parte dos endereços gerados pelo microprocessador
- Um sinal Enable que é usado para disparar uma operação de leitura ou escrita
- Um sinal IRQ que pode ser usado para interromper o microprocessador quando um dado for recebido ou quando o transmissor estiver pronto para transmitir um novo dado.
- Os sinais de RX e TX
- O sinal RTS (saída), gerado pela 6850 para indicar que ela está pronta para transmitir
- O sinal CTS (entrada), que indica que a 6850 pode transmitir
- O sinal DCD (entrada), que indica que o sinal RX é válido
- Um sinal de clock (entrada), que é usado para deslocar os bits na entrada e saída.
O firmware foi desenvolvido usando o SDK Pico do Raspberry Pi para obter o máximo controle sobre os pinos. A maior parte do código consiste em ativar ou desativar os pinos no momento certo.
Uma parte interessante é a geração do clock do MC6850, na qual utilizei o periférico PWM do RP2040. Executando o Pico a 200 MHz, obtive 7,372 MHz. O firmware também pode ser compilado para gerar 1,8432 MHz (16 × 115200); o valor real obtido foi de 1,845 MHz. A razão pela qual obtive valores tão próximos é que o PWM do RP2040 usa um divisor fracionário de 12 bits (8 bits para a parte inteira e 4 para a parte fracionária).
O "driver" do visor é muito simples. Ele escreve diretamente na memória do controlador do visor e não mantém uma cópia da tela na memória do Pico. Uma fonte 8x8 é usada para simular um visor alfanumérico de 8 linhas por 16 colunas.
Os testes realizados foram:
- Verificar o status e os sinais RTS/IRQ após uma reinicialização.
- Verificar o status e os sinais RTS/IRQ após desativar o RTS e o IRQ.
- Testar as várias combinações das linhas de seleção do chip (o MC6850 possui três pinos de seleção, sendo um deles ativo em nível baixo).
- Testar se os dados enviados pelo MC6850 podem ser recebidos pelo RP2040.
- Testar se os dados enviados pelo RP2040 podem ser recebidos pelo MC6850.
CONCLUSÃO
O projeto está montado, o hardware funciona e tenho uma primeira versão do firmware. A maioria das MC6850 que eu tenho funciona!
Tomei um baile por alguns dias com o soquete ZIF, que não dava bom contato justamente no pino de alimentação. Se olharem a figura com atenção, o soquete tem escrito "TEXTODL" em vez de "TEXTOOL" (que é marca registrada da 3M). Some-se a isso uma Pico com comportamento estranho na serial e o resultado foi muita coçação de cabeça.
A documentação do projeto, incluindo o software, está disponível em https://github.com/dquadros/MC6850Tester.
Uma ideia de aperfeiçoamento é usar a PIO para realizar a leitura e a escrita na MC6850, o que deve permitir um timing mais preciso.


Nenhum comentário:
Postar um comentário