Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
Siguiendo con mi Instructable anterior, ahora puse el 6502 en una placa de banda y agregué un Adaptador de interfaz versátil (VIA) 6522. Nuevamente, estoy usando una versión WDC del 6522, ya que es una combinación perfecta para su 6502. Estos nuevos chips no solo usan mucha menos energía que las versiones originales de MOS, sino que pueden funcionar a velocidades más lentas o incluso pasar un programa sin problemas.
El programa Arduino fue escrito originalmente por Ben Eater (que tiene muchos videos en YouTube) y yo lo modifiqué para lograr este resultado.
Suministros
1 x Procesador WDC W65C02
1 x Adaptador de interfaz versátil WDC W65C22
1 x 74HC00N IC (puerta NAND cuádruple de 2 entradas) o similar
1 x tablero de tira de 10 cm de ancho (35 líneas)
2 x enchufes DIL de 40 pines
1 x zócalo DIL de 14 pines
Pines de encabezado de PCB de 2,54 mm
Zócalos de cabezal de PCB de 2,54 mm
Interruptor de botón pulsador táctil momentáneo de 1 x 12 mm montado en PCB SPST o similar
1 x resistencia de 1K
1 x resistencia 3K3
2 condensadores cerámicos de 0,1 uF
1 x Marquesina de luz de agua de 8 vías LED rojo de 5 mm
Cable de varios colores para conexiones
8 cables de enlace macho - macho
Paso 1: la placa de circuito
La placa de circuito es bastante compacta y la parte inferior se conecta directamente al Arduino MEGA. Para lograr esto, los pines se empujan lo más posible en los soportes de plástico antes de soldarlos a la parte inferior de la placa. Se podrían haber usado pines más largos para esto, pero los pines estándar significan que la placa descansa firmemente sobre el MEGA.
He alineado los circuitos integrados 6502 y 6522 para que utilicen las pistas de la placa de banda para conectarse al MEGA. También hay algunas conexiones para el 6502 ocultas debajo del IC. Al hacer la placa, lo primero que se hizo fue cortar las 16 tiras que se conectarán a la doble fila de enchufes del Arduino. No es necesario cortar los 2 externos, ya que 5v y Gnd están en ambos lados. Luego suelde en las 2 filas de 18 pines en la parte inferior y las 2 filas de 18 enchufes en la parte superior.
Después de eso, los enchufes DIL se soldaron en su lugar y las pistas se cortaron entre ellos. Podría haber guardado una conexión colocando el pin 14 del 74HC00 en la misma pista que 5v. Solo corté las pistas cuando estaba seguro de que debían estarlo mientras soldaba los cables de conexión. Sin embargo, las cosas no siempre salen según lo planeado, originalmente diseñé la placa de tira de la placa de pruebas anterior usando los pines 2, 3 y 7 del Arduino, pero estos no se alinean con los orificios en la placa de tira, por lo que tuve que usar pines 18, 31 y 37. De ahí los enlaces en mi placa en 31 y 37. Quizás se pregunte por qué no utilicé uno de los pines no utilizados (23, 24, etc.) para el reloj, esto se debe a que no admiten interrumpe, así que tuve que usar los pines 18, 19, 20 o 21 que lo hacen. Afortunadamente, estos 4 pines se alinean con los agujeros en el tablero de tiras y mantienen todo compacto. El pin 18 también está más alejado de todos los demás cables.
También puede notar que mi tablero completo no es exactamente el mismo que mi diagrama. Esto se debe a que estaba siguiendo el diagrama de otra persona. De ahí las conexiones al 74HC00. También agregué un LED de encendido y 2 filas adicionales de enchufes para Gnd y 5v, así como un par de condensadores más.
Podría haber conectado los 2 enchufes de datos, pero esto significaría que muchos más cables cruzan la placa. Opté por 8 cables de enlace para hacer esto como medida temporal.
Los puertos A y B del 6522 tienen enchufes soldados a sus pistas para que las marcas de LED se puedan insertar fácilmente.
Ahora hay muchos menos cables de los que había en la versión de tablero.
Paso 2: teoría de la programación
El 6522 tiene dos puertos de E / S, así como muchas otras funciones, pero los puertos A y B son fácilmente accesibles. Para generar datos en el puerto, el Registro de dirección de datos (DDR) debe configurarse en consecuencia y los datos deben enviarse al puerto en sí.
Con la configuración anterior, el 6522 se encuentra en $ E000.
Para enviar datos en el puerto B, el DDR en $ E002 se establece en $ FF (255 - todas las salidas) y los datos se envían a $ E000.
Para enviar datos en el puerto A, el DDR en $ E003 se establece en $ FF (255 - todas las salidas) y los datos se envían a $ E001.
El siguiente código carga $ FF en el registro 6502 A y lo escribe en DDR B a $ E002. Luego carga $ 55 y los escribe en ORB. El código se rota (dando $ AA) y se escribe en ORB. El programa retrocede tp $ 1005 y se repite sin cesar. NOTA: el DDR solo necesita inicializarse una vez.
Dirección Desmontaje 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 en binario es 010101010 y $ AA es 10101010, lo que hace que los LED alternen 4 encendidos y 4 apagados.
Solución rápida y sucia:
Reemplace el 74HC00 (puerta NAND de entrada Quad 2) con un 74HC08 (puerta AND de entrada Quad 2) y el 6522 ahora se encuentra en $ 6000 en lugar de $ E000. Esto lo mueve desde el 32K superior al 32K inferior de la memoria direccionable del 6502.
Paso 3: el programa y la salida de Arduino
Como el 6502 no tiene RAM para leer, el Arduino está proporcionando el programa para que lo lea. Cuando se detecta un pulso de reloj en el pin 18, Arduino coloca los datos del programa en el bus de datos (pines 39, 41, 43, 45, 47, 49, 51 y 53 de Arduino). El 6502 genera sus propias direcciones que solo son monitoreadas por Arduino en los pines pares 22 a 52. El Arduino también está suministrando el pulso de reloj en el pin 37. La línea R / W del 6502 se monitorea en el pin 31.
Como el Arduino está proporcionando los datos, hasta ahora no ha sido posible hacer que el 6502 ingrese datos desde el VIA (a menos que usted lo sepa mejor).
El programa Arduino está debajo y una salida de muestra del Serial Monitor está arriba.
Paso 4: Conclusión
Nuevamente he intentado mostrar cómo configurar una "Computadora 6502" mínima.
En esta etapa, el 6502 todavía depende del Arduino para que le proporcione un programa y un pulso de reloj para que se ejecute.
Es un paso más allá que cuando lo configuré en la placa de pruebas.
No he usado el 74HC373 esta vez sino el 6522 más complejo para bloquear las salidas de datos. Además, el 6522 tiene dos puertos de E / S.
Tengo la intención de llevar este proyecto más allá instalando algo de SRAM o una EEPROM.