terça-feira, maio 19, 2026

MC6850Tester: Usando uma Raspberry Pi Pico para testar uma MC6850 ACIA

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.
Do lado da interface serial temos:
  • 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.
Os sinais RTS, CTS e DCD são lembranças do tempo em que se usavam modems para comunicação serial.

O sinal de clock pode ser 1, 16 ou 64 vezes o baudrate desejado. Nos projetos atuais, é comum usar o mesmo sinal de clock do microprocessador, escolhido para gerar a taxa de baudrate de 115200 bps. Com o fator de 64, o clock resulta em 7,3728 MHz. Com o fator de 16, o clock fica em 1,8432 MHz. Um detalhe (muitas vezes ignorado) é que, pela especificação, estes valores requerem a versão B da MC6850.

O HARDWARE DO TESTADOR

A ideia principal é conectar o máximo possível de pinos do MC6850 a um microcontrolador para controlá-los e lê-los. O microcontrolador que escolhi foi o RP2040 ; o projeto utiliza uma placa Raspberry Pi Pico.

O MC6850 é normalmente usado com 5 V. O RP2040 foi recentemente certificado como tolerante a 5V, mas há uma ressalva: o sistema de E/S do RP2040 deve estar totalmente energizado antes que 5V sejam aplicados a qualquer pino.

Minha solução foi usar o RP2040 para controlar a tensão de 5 V que alimenta o MC6850 . Isso também permite remover e inserir um MC6850 com segurança quando o testador estiver ocioso. Para controlar a tensão de 5 V, usei um transistor NPN e um MOSFET; obviamente, é uma solução com excesso de engenharia.

Para a interface do usuário, utilizei um display OLED de 128x64 e um único botão. Também conectei um botão de reset ao Pico e um LED para indicar que a alimentação de 5 V está ligada.

Depois de contabilizadas as entradas/saídas para controle de 5 V, OLED e botão, restam GPIOs suficientes para conectar todos os pinos do MC6850, exceto CTS e DCD (estes estão conectados diretamente à terra).


O FIRMWARE

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: