quarta-feira, dezembro 06, 2017

6502 na Protoboard - Parte 1

Seguindo na minha mania de montar computadores de 8 bits na protoboard, agora é a vez do 6502. Neste caso não vou inventar muito e seguir este belo circuito de Grant Searle.



A beleza do circuito está na simplicidade: temos o 6502, um oscilador a cristal usando inversores, uma RAM, uma ROM, uma UART e uma decodificação dos sinais de controle feita com portas NAND. Trabalhando a 1.8MHz e ligando a UART a um conversor serial USB, precisamos de apenas seis integrados! O resultado final será um computador rodando BASIC com entrada e saída serial. Obs: veja o circuito na página do Grant.


Apesar de toda a simplicidade, a minha ansiedade é muito alta e resolvi procurar uma forma de fazer algo visível com apenas parte do circuito montado. Vamos deixar pelo menos um crítico bravo e piscar um LED!

Nesta parte 1 a montagem fica restrita a oscilador, 6502,  Rom e decodificação dos sinais de controle. Eu resolvi viver perigosamente e trocar os 74LS por 74HC apesar de já ter lido recomendações em contrário.  O write da Ram é usado como clock para um flip-flop, de forma que cada escrita em memória fará o LED mudar de estado:


Como não tinha a mão uma 27128 (EPROM de 16KBytes), usei uma 27E512 (EEPROM de 64KBytes, fixando as duas linhas de endereço adicionais em zero). Tive problemas com o reset ao ligar: o circuito do Searle usa apenas um resistor de 2K2 para Vcc e um interruptor para terra. Para alongar o reset, troquei o resistor por um de 100K e coloquei um capacitor de 1uF para terra. Um diodo em paralelo ao resistor cuida de descarregar o capacitor quando a fonte é desligada:

Agora é só escrever um programa assembler que faz uma escrita de temos em tempos, tomando o cuidado de usar somente os registradores pois não temos RAM:
C000 INICIO:
C000        LDX #$00        A2 00
C002 LOPX:
C002        LDY #$00        A0 00              2
C004 LOPY:  
C004        DEY             88
C005        BNE LOPY        D0 FD
C007        DEX             CA
C008        BNE LOPX        D0 F8
C00A        STA $0000       8D 00 00
C00D        JMP INICIO      4C 00 C0
E temos um LED piscando:



Na segunda parte vamos ver o circuito completo funcionando.

Nenhum comentário: