Índice:

6502 e 6522 Minimal Computer (com Arduino MEGA) Parte 2: 4 etapas
6502 e 6522 Minimal Computer (com Arduino MEGA) Parte 2: 4 etapas

Vídeo: 6502 e 6522 Minimal Computer (com Arduino MEGA) Parte 2: 4 etapas

Vídeo: 6502 e 6522 Minimal Computer (com Arduino MEGA) Parte 2: 4 etapas
Vídeo: Как процессоры читают машинный код? — 6502 часть 2 2024, Novembro
Anonim
6502 e 6522 Minimal Computer (com Arduino MEGA) Parte 2
6502 e 6522 Minimal Computer (com Arduino MEGA) Parte 2

Seguindo com meu Instructable anterior, agora coloquei o 6502 em uma placa de strip e adicionei um Adaptador de Interface Versátil 6522 (VIA). Mais uma vez, estou usando uma versão WDC do 6522, pois é uma combinação perfeita para o 6502. Esses novos chips não apenas usam muito menos energia do que as versões originais do MOS, mas também podem funcionar em velocidades mais lentas ou até mesmo passar por cima um programa sem problemas.

O programa Arduino foi originalmente escrito por Ben Eater (que tem muitos vídeos no YouTube) e foi modificado por mim para atingir este resultado.

Suprimentos

1 x processador WDC W65C02

1 x adaptador de interface versátil WDC W65C22

1 x 74HC00N IC (Quad 2 entradas NAND gate) ou similar

Placa de tira de 1 x 10 cm de largura (35 linhas)

2 tomadas DIL de 40 pinos

1 x tomada DIL de 14 pinos

Pinos de cabeçalho PCB 2,54 mm

Soquetes de conector PCB 2,54 mm

1 x 12mm botão tátil momentâneo interruptor PCB montado SPST ou similar

1 x 1K resistor

1 x resistor 3K3

2 x 0,1 uF capacitores de cerâmica

1 x 8 vias de luz de água marquee 5 mm vermelho LED

Fio de várias cores para conexões

8 fios de ligação macho - macho

Etapa 1: a placa de circuito

A placa de circuito
A placa de circuito
A placa de circuito
A placa de circuito

A placa de circuito é bastante compacta e a parte inferior se conecta diretamente ao Arduino MEGA. Para conseguir isso, os pinos são empurrados o mais longe possível nos suportes de plástico antes de serem soldados na parte inferior da placa. Pinos mais longos poderiam ter sido usados para isso, mas os pinos padrão significam que a placa fica firme no topo do MEGA.

Eu alinhei os CIs 6502 e 6522 para que eles usem as trilhas da placa de strip para se conectar ao MEGA. Existem também algumas conexões para o 6502 escondidas sob o IC. Ao fazer a placa, a primeira coisa a fazer foi cortar as 16 tiras que se conectarão à fila dupla de soquetes do Arduino. O 2 externo não precisa ser cortado, pois o 5v e o Gnd estão em ambos os lados. Em seguida, solde as 2 fileiras de 18 pinos do lado inferior e as 2 fileiras de 18 soquetes do lado superior.

Depois disso, os soquetes DIL foram soldados no lugar e os trilhos cortados entre eles. Eu poderia ter salvado uma conexão colocando o pino 14 do 74HC00 na mesma trilha do 5v. Eu só cortei os trilhos quando tive certeza de que precisavam ser enquanto eu soldava os fios de conexão. No entanto, as coisas nem sempre saem como planejado, originalmente projetei a placa de tira da placa de pão anterior usando os pinos 2, 3 e 7 do Arduino, mas estes não se alinham com os orifícios na placa de tira, então tive que usar pinos 18, 31 e 37. Daí os links na minha placa em 31 e 37. Você pode se perguntar por que eu não usei um dos pinos não usados (23, 24 etc) para o relógio, isso é porque eles não suportam interrupções, então tive que usar os pinos 18, 19, 20 ou 21 que fazem. Felizmente, esses 4 pinos se alinham com os orifícios da placa de tira e mantêm tudo compacto. O pino 18 também está mais afastado de todos os outros fios.

Você também pode notar que meu quadro preenchido não é exatamente igual ao meu diagrama. Isso porque eu estava seguindo o diagrama de outra pessoa. Daí as conexões com o 74HC00. Eu também adicionei um LED de energia e 2 linhas extras de soquetes para Gnd e 5v, bem como mais alguns capacitores.

Eu poderia ter conectado os 2 soquetes de dados, mas isso significaria muito mais fios cruzando a placa. Optei por 8 fios de link para fazer isso como uma medida temporária.

As portas 6522 A e B têm soquetes soldados em seus trilhos para que as marcas de LED possam ser facilmente inseridas.

Existem muito menos fios agora do que na versão breadboard.

Etapa 2: Teoria de Programação

Teoria da Programação
Teoria da Programação

O 6522 possui duas portas de E / S, bem como muitos outros recursos, mas as portas A e B são facilmente acessíveis. Para enviar dados na porta, o Data Direction Register (DDR) precisa ser configurado adequadamente e os dados enviados para a própria porta.

Com a configuração acima, o 6522 está localizado a $ E000.

Para enviar dados na porta B, o DDR em $ E002 é definido como $ FF (255 - todas as saídas) e os dados são enviados para $ E000.

Para enviar dados na porta A, o DDR em $ E003 é definido como $ FF (255 - todas as saídas) e os dados são enviados para $ E001.

O código abaixo carrega $ FF no registrador 6502 A e o grava no DDR B em $ E002. Em seguida, carrega $ 55 e grava no ORB. O código é girado (dando $ AA) e escrito no ORB. O programa salta para $ 1005 e se repete indefinidamente. NOTA: o DDR só precisa ser inicializado uma vez.

Abordar a desmontagem do Hexdump

$ 1000 a9 ff LDA # $ ff $ 1002 8d 02 e0 STA $ e002 $ 1005 a9 55 LDA # $ 55 $ 1007 8d 00 e0 STA $ e000 $ 100a 6a ROR A $ 100b 8d 00 e0 STA $ e000 $ 100e 4c 05 10 JMP $ 1005

$ 55 em binário é 010101010 e $ AA é 10101010, o que faz com que os LEDs alternem 4 acesos, 4 apagados.

Correção rápida e suja:

Substitua o 74HC00 (porta NAND de entrada Quad 2) por um 74HC08 (porta AND Quad 2 de entrada) e o 6522 agora está localizado por $ 6.000 em vez de $ E000. Isso o move dos 32K superiores para os 32K inferiores da memória endereçável do 6502.

Etapa 3: o programa e a saída do Arduino

O programa e saída do Arduino
O programa e saída do Arduino

Como o 6502 não tem RAM para leitura, o Arduino está fornecendo o programa para leitura. Quando um pulso de clock é detectado no pino 18, o Arduino coloca os dados do programa no barramento de dados (pinos do Arduino 39, 41, 43, 45, 47, 49, 51 e 53). O 6502 gera seus próprios endereços, que são monitorados apenas pelo Arduino nos pinos pares 22 a 52. O Arduino também está fornecendo o pulso de clock no pino 37. A linha R / W do 6502 é monitorada no pino 31.

Como o Arduino está fornecendo os dados, até agora não foi possível fazer o 6502 inserir dados do VIA (a menos que você conheça melhor).

O programa Arduino está abaixo e um exemplo de saída do Serial Monitor está acima.

Etapa 4: Conclusão

Mais uma vez, tentei mostrar como configurar um "Computador 6502" mínimo.

Nesse estágio, o 6502 ainda depende do Arduino para fornecer um programa e um pulso de clock para que ele funcione.

É um passo além do que quando o configurei no breadboard.

Não usei o 74HC373 desta vez, mas o mais complexo 6522 para travar as saídas de dados. Além disso, o 6522 tem duas portas de E / S.

Pretendo levar este projeto adiante instalando alguma SRAM ou EEPROM.

Recomendado: