Índice:

6502 Computador mínimo (com Arduino MEGA) Parte 1: 7 etapas
6502 Computador mínimo (com Arduino MEGA) Parte 1: 7 etapas

Vídeo: 6502 Computador mínimo (com Arduino MEGA) Parte 1: 7 etapas

Vídeo: 6502 Computador mínimo (com Arduino MEGA) Parte 1: 7 etapas
Vídeo: Conheça os sensores do Arduino #ManualMaker Aula 6, Vídeo 1 2024, Novembro
Anonim
6502 Computador mínimo (com Arduino MEGA) Parte 1
6502 Computador mínimo (com Arduino MEGA) Parte 1

O microprocessador 6502 apareceu pela primeira vez em 1975 e foi projetado por uma pequena equipe liderada por Chuck Peddle para a MOS Technology. Naquela época, era usado em consoles de vídeo e computadores domésticos, incluindo Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 e 64. Naquela época, era um dos mais baratos do mercado. Ele nunca foi realmente embora e agora é usado por amadores e profissionais para muitas aplicações.

A versão que estou usando é o W65C02S6TPG-14, que é feito pela Western Design Center e usa dez vezes menos energia do que o original. É especial porque não precisa funcionar a 1 MHz como o chip original. Ele pode ser executado muito mais devagar ou ser usado para passo único em um programa e até mesmo com rampa de até 14 MHz. A folha de dados do chip explica seus recursos. Outros chips 6502 não têm essa capacidade e não funcionarão dessa maneira. Os chips estão atualmente disponíveis no Ebay, bem como em outras fontes.

Suprimentos

Todas as peças usadas estão disponíveis no Ebay, AliExpress e outros.

Etapa 1: O conceito

Me inspirei em Ben Eater, que produziu uma série de vídeos no YouTube sobre o 6502 e muitos outros aspectos da construção de computadores e circuitos. O programa foi escrito originalmente por ele e eu modifiquei este e alguns de seus projetos para criar este Instructable. Outra pessoa que me inspirou foi Andrew Jacobs, que tem uma seção no GitHub onde usa um micro PIC para controlar seu 6502.

Como Ben, estou usando um Arduino MEGA para monitorar o 6502. Também estou usando o MEGA para fornecer o sinal de clock, ao contrário do Ben. No momento, não estou usando nenhum EEPROM ou RAM.

Etapa 2: Requisitos

Requisitos
Requisitos

Para construir este "computador", uma lista de itens é a seguinte:

1 x Arduino MEGA

1 x Centro de Design Ocidental W65C02S6TPG-14

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

1 x 74HC373N IC (trava transparente do tipo Octal D) ou semelhante

2 tábuas de pão com 830 furos (1 em uma pitada)

Vários Dupont macho - terminais e fios de ligação

2 x LEDs (usei 5 mm azul porque você pode escapar sem resistores)

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

1 x 1K resistor

2 x 0,1 uF capacitores de cerâmica

1 x 8 Vias Water Light Marquee 5mm LED vermelho (como acima) ou 8 LEDs e resistores

NOTA: Se você obtiver o kit não soldado, poderá inserir os LEDs ao contrário, para que sejam cátodos comuns. Eu prendo um cabo fly (em vez do pino) para que ele possa se conectar facilmente em outro lugar. VCC agora se torna Ground. Você pode, é claro, girar os LEDs (em um item montado) e soldá-los novamente, mas isso é muito chato! Os kits estão disponíveis no AliExpress.

Etapa 3: juntando tudo

Juntar as peças
Juntar as peças
Juntar as peças
Juntar as peças

Achei mais fácil usar os novos fios da DuPont que não foram separados de sua fita para os barramentos de endereço e dados.

Conecte o pino 9 (A0) do 6502 ao pino 52 do MEGA, pino 10 (A1) do 6502 ao pino 50 etc …

até

Conecte o pino 25 (A15) do 6502 ao pino 22 do MEGA.

16 conexões até agora.

Da mesma forma

Conecte o pino 26 (D7) do 6502 ao pino 39 do MEGA, pino 27 (D6) do 6502 ao pino 41 etc …

até

Conecte o pino 33 (D0) do 6502 ao pino 53 do MEGA.

Mais 8 conexões.

Conecte o pino 8 (VDD) a 5v no MEGA.

Um capacitor de 0,1uF conectado do pino 8 ao Gnd da placa de pão pode ser útil aqui, mas não necessário.

Conecte o pino 21 (VSS) ao Gnd no MEGA.

Os pinos 2, 4, 6, 36 e 38 podem ser ligados a 5v

Conecte o pino 37 (Relógio) ao pino 2 e pino 7 do MEGA.

Conecte o pino 34 (RWB) ao pino 3 do MEGA.

Conecte o pino 40 (Reinicializar) conforme o diagrama acima.

Etapa 4: Testando o circuito

Testando o circuito
Testando o circuito

Nesta fase, o 6502 funcionará e o programa1 pode ser usado. Se você estiver usando a marquise de 8 vias (como acima), ela pode ser inserida diretamente na placa de ensaio e o cabo da mosca conectado ao aterramento, ou você pode usar 8 LEDs e resistores. Os LEDS mostrarão o que está no barramento de dados.

Nesse estágio, seria bom definir os atrasos no Loop () para 500 ou mais, para acompanhar o que está acontecendo.

Você deve obter uma saída semelhante no Monitor Serial como o mostrado acima. Quando Reset é pressionado, o processador passa por 7 ciclos e a seguir procura o início do programa nas localizações $ FFFC e $ FFFD. Como não há endereços físicos para o 6502 ler, temos que fornecê-los do MEGA.

Na saída acima, o 6502 lê $ FFFC e $ FFFD e obtém $ 00 e $ 10 (byte baixo, byte alto) que é o início do programa em $ 1000. O processador então começa a executar o programa na localização $ 1000 (como acima). Nesse caso, ele lê $ A9 e $ 55, ou seja, LDA # $ 55 (Carregue 85 no acumulador). Novamente, como não há local de memória física, o MEGA simula o que é lido do barramento de dados.

$ 55 (85) dá o padrão binário 01010101 e quando girado 1 bit para a esquerda dá $ AA (170) 10101010.

O programa mostra que o processador está funcionando corretamente, mas logo fica um pouco entediante, então prossiga para a próxima parte.

Etapa 5: Próxima etapa

Próxima Etapa
Próxima Etapa
Próxima Etapa
Próxima Etapa

A "pilha de espaguete" acima é provavelmente algo parecido com o que você terá após esta fase.

Em seguida, você precisa adicionar os ICs 74HC373N e 74HC00N à placa de ensaio.

Infelizmente, os pinos do 373 não se alinham com o barramento de dados, portanto, precisam ser presos com fios.

Conecte 5v ao pino 20.

Conecte o aterramento ao pino 10.

Conecte o pino 33 (D0) do 6502 ao pino 3 (D0) do 74HC373N

e da mesma forma com os pinos D1 a D7.

Q0 a Q7 são as saídas e precisarão ser conectadas ao letreiro LED ou LEDs e resistores individuais.

Com o 74HC00, apenas 2 de seus portões são necessários

Conecte 5v ao pino 14.

Conecte o aterramento ao pino 7.

Conecte o pino 17 (A8) do 6502 ao pino 1 (1A) do 74HC00

Conecte o pino 25 (A15) do 6502 ao pino 2 (1B) do 74HC00

Conecte o pino 34 (R / W) do 6502 ao pino 5 (2B) do 74HC00

Conecte o pino 3 (1Y) do 74HC00 ao pino 4 (2A) do 74HC00

Conecte o pino 6 (2Y) do 74HC00 ao pino 11 (LE) do 74HC373N

Conecte o pino 11 (LE) do 74HC373N ao pino 1 (OE) do 74HC373N

Você pode conectar um LED azul a 1Y e aterrar, bem como 2Y ao aterramento, isso indicará quando o gate está ativo.

Finalmente, mude a linha no procedimento onClock do programa1 para o programa2

setDataPins (programa2 [deslocamento]);

Etapa 6: o programa

O programa
O programa
O programa
O programa

O programa 6502-Monitor contém as duas rotinas 6502 descritas acima.

O programa ainda está em desenvolvimento e um pouco desarrumado.

Ao executar o programa2, os atrasos no loop () podem ser 50 ou menos e até mesmo removidos por completo. Comentar as linhas Serial.print () também faz o 6502 funcionar mais rápido. Desconectar o pino 1 (OE) do 373 do pino 11 (LE) produz resultados diferentes. Desconectar os pinos 1 e 11 do 373 das portas NAND permite que você veja o que está no barramento de dados a cada ciclo de clock.

Pode ser necessário amarrar o OE ao aterramento em vez de deixá-lo flutuando, pois as 8 linhas de saída são desativadas se este pino ficar alto. Quando o pino LE está alto, os pinos de saída são iguais às entradas. Tirar o pino LE baixo bloqueia as saídas, ou seja, se os pinos de entrada mudam, as saídas permanecem as mesmas.

Tentei manter o programa o mais simples possível para torná-lo mais fácil de entender.

Experimentar os atrasos permite que você siga exatamente o que o 6502 está fazendo.

Abaixo estão os dois programas (ambos executados no endereço $ 1000) no 6502 Assembler:

programa1

LDA # $ 55

NOP

ROL

STA $ 1010

JMP $ 1000

O ROL gira o conteúdo do acumulador um bit à esquerda, o que significa que $ 55 agora se torna $ AA.

No código da máquina (hex): A9 55 EA 2A 8D 10 10 4C 00 10

programa 2

LDA # $ 01

STA $ 8100

ADC # $ 03

STA $ 8100

JMP $ 1005

No código da máquina (hex): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

No programa 2, agora há um endereço físico $ 8100, que é onde o 74HC373 está localizado no barramento de endereços.

ou seja, A15 do 6502 é 32768 ($ 8.000) e A8 é 256 ($ 0100) = 33024 ($ 8.100).

Portanto, quando o 6502 grava em $ 8100 (STA $ 8100), o R / W do 6502 está baixo e os dados no barramento de dados 6502 são travados quando o 373 LE fica baixo. Por causa do Portão 74HC00 NAND, os sinais são invertidos.

Na impressão de tela acima, a segunda gravação foi incrementada em 3 (ADC # $ 03) - passou de $ 7F para $ 82.

Na realidade, mais de 2 linhas do barramento de endereços seriam usadas para a localização específica do 373. Como este é o único endereço físico entre os 65536 possíveis, ele demonstra como o barramento de endereços funciona. Você pode experimentar diferentes pinos de endereço e colocá-lo em um local diferente. Obviamente, você precisará alterar os operandos STA para o novo local. por exemplo. Se você usou as linhas de endereço A15 e A9, o endereço seria $ 8200 (32768 + 512).

Etapa 7: Conclusão

Conclusão
Conclusão

Tentei demonstrar como é fácil colocar um 6502 em funcionamento.

Não sou um especialista neste campo, portanto, gostaria de receber quaisquer comentários construtivos ou informações.

Você é bem-vindo para desenvolver isso ainda mais e eu estaria interessado no que você fez.

Pretendo adicionar um EEPROM, SRAM e um 6522 ao projeto, bem como colocá-lo em stripboard no futuro.

Recomendado: