Tabla de contenido:

6502 Computadora mínima (con Arduino MEGA) Parte 1: 7 pasos
6502 Computadora mínima (con Arduino MEGA) Parte 1: 7 pasos

Video: 6502 Computadora mínima (con Arduino MEGA) Parte 1: 7 pasos

Video: 6502 Computadora mínima (con Arduino MEGA) Parte 1: 7 pasos
Video: “Hello, world” from scratch on a 6502 — Part 1 2024, Noviembre
Anonim
6502 Computadora mínima (con Arduino MEGA) Parte 1
6502 Computadora mínima (con Arduino MEGA) Parte 1

El microprocesador 6502 apareció por primera vez en 1975 y fue diseñado por un pequeño equipo dirigido por Chuck Peddle para MOS Technology. En aquel entonces se usaba en consolas de video y computadoras domésticas como Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 y 64. En ese momento era una de las más baratas del mercado. Nunca ha desaparecido realmente y ahora es utilizado por aficionados y profesionales para muchas aplicaciones.

La versión que estoy usando es la W65C02S6TPG-14 que está fabricada por Western Design Center y usa diez veces menos energía que la original. Es especial porque no tiene que funcionar a 1 MHz como el chip original. Puede funcionar mucho más lento o usarse en un solo paso a través de un programa e incluso aumentar hasta 14 MHz. La hoja de datos del chip explica sus capacidades. Otros chips 6502 no tienen esta capacidad y no funcionarán de esta manera. Los chips están actualmente disponibles en Ebay, así como en otras fuentes.

Suministros

Todas las piezas utilizadas están disponibles actualmente en Ebay, AliExpress y otros.

Paso 1: el concepto

Me inspiré en Ben Eater, quien ha producido una serie de videos en YouTube sobre el 6502 y muchos otros aspectos de la construcción de computadoras y circuitos. El programa fue escrito por él originalmente y he modificado esto y algunos de sus diseños para crear este Instructable. Otra persona que me inspiró fue Andrew Jacobs, que tiene una sección en GitHub donde usa un micro PIC para controlar su 6502.

Como Ben, estoy usando un Arduino MEGA para monitorear el 6502. También estoy usando el MEGA para proporcionar la señal de reloj a diferencia de Ben. En la actualidad tampoco estoy usando EEPROM ni RAM.

Paso 2: requisitos

Requisitos
Requisitos

Para construir esta "computadora", una lista de elementos es la siguiente:

1 x Arduino MEGA

1 x Centro de diseño occidental W65C02S6TPG-14

1 x 74HC00N IC (puerta NAND cuádruple de 2 entradas) o similar

1 x 74HC373N IC (pestillo transparente octal tipo D) o similar

2 tableros de pan de 830 hoyos (1 en un apuro)

Varios cables Dupont macho - macho y cables de enlace

2 x LED (utilicé azul de 5 mm, ya que puede salirse con la suya sin resistencias)

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

2 condensadores cerámicos de 0,1 uF

1 x Marquesina de luz de agua de 8 vías LED rojo de 5 mm (como arriba) u 8 LED y resistencias

NOTA: Si obtiene el kit sin soldar, puede insertar los LED al revés para que sean cátodos comunes. Adjunto un cable de mosca (en lugar del pin) para que pueda conectarse fácilmente en otro lugar. VCC ahora se convierte en Ground. Por supuesto, puede girar los LED (en un elemento ensamblado) y volver a soldarlos, ¡pero esto es un montón de faff! Los kits están disponibles actualmente en AliExpress.

Paso 3: armarlo

Poniendo todo junto
Poniendo todo junto
Poniendo todo junto
Poniendo todo junto

Me resultó más fácil usar cables nuevos de DuPont que no se habían separado de su cinta para los buses de dirección y datos.

Conecte el pin 9 (A0) del 6502 al pin 52 del MEGA, pin 10 (A1) del 6502 al pin 50, etc.

Hasta que

Conecte el pin 25 (A15) del 6502 al pin 22 del MEGA.

16 conexiones hasta ahora.

igualmente

Conecte el pin 26 (D7) del 6502 al pin 39 del MEGA, pin 27 (D6) del 6502 al pin 41, etc.

Hasta que

Conecte el pin 33 (D0) del 6502 al pin 53 del MEGA.

8 conexiones más.

Conecte el pin 8 (VDD) a 5v en el MEGA.

Un condensador de 0.1uF conectado desde el pin 8 a Gnd de la placa de pruebas podría ser útil aquí, pero no necesario.

Conecte el pin 21 (VSS) a Gnd en el MEGA.

Los pines 2, 4, 6, 36 y 38 se pueden conectar a 5v

Conecte el pin 37 (Reloj) al pin 2 y al pin 7 del MEGA.

Conecte el pin 34 (RWB) al pin 3 del MEGA.

Conecte el pin 40 (Reset) como se muestra en el diagrama de arriba.

Paso 4: Prueba del circuito

Probando el circuito
Probando el circuito

En esta etapa, el 6502 funcionará y se podrá utilizar el programa1. Si está usando la marquesina de 8 vías (como arriba), puede insertarla directamente en la placa de pruebas y el cable de mosca conectado a tierra, o puede usar 8 LED y resistencias. Los LED mostrarán lo que hay en el bus de datos.

En esta etapa, sería bueno establecer los retrasos en el bucle () en 500 o más, para seguir lo que está sucediendo.

Debería obtener una salida similar en el Monitor serie como la anterior. Cuando se presiona Reset, el procesador pasa por 7 ciclos y luego busca el inicio del programa en las ubicaciones $ FFFC y $ FFFD. Como no hay direcciones físicas para que las lea el 6502, tenemos que proporcionarlas desde el MEGA.

En la salida anterior, el 6502 lee $ FFFC y $ FFFD y obtiene $ 00 y $ 10 (byte bajo, byte alto) que es el inicio del programa en $ 1000. El procesador entonces comienza a ejecutar el programa en la ubicación $ 1000 (como arriba). En este caso, lee $ A9 y $ 55, es decir, LDA # $ 55 (Cargue 85 en el acumulador). Nuevamente, como no hay una ubicación de memoria física, el MEGA simula lo que se lee desde el bus de datos.

$ 55 (85) da el patrón binario 01010101 y cuando se gira 1 bit a la izquierda da $ AA (170) 10101010.

El programa muestra que el procesador está funcionando correctamente pero pronto se vuelve un poco aburrido, así que pasa a la siguiente parte.

Paso 5: siguiente paso

Próximo paso
Próximo paso
Próximo paso
Próximo paso

La "pila de espaguetis" de arriba es probablemente algo así como lo que tendrás después de esta etapa.

A continuación, debe agregar los circuitos integrados 74HC373N y 74HC00N a la placa de pruebas.

Desafortunadamente, los pines del 373 no se alinean con el bus de datos, por lo que deberán conectarse con cables.

Conecte 5v al pin 20.

Conecte tierra al pin 10.

Conecte el pin 33 (D0) del 6502 al pin 3 (D0) del 74HC373N

e igualmente con los pines D1 a D7.

Q0 a Q7 son las salidas y deberán conectarse a la marquesina LED o LED y resistencias individuales.

Con el 74HC00 solo se necesitan 2 de sus puertas

Conecte 5v al pin 14.

Conecte tierra al pin 7.

Conecte el pin 17 (A8) del 6502 al pin 1 (1A) del 74HC00

Conecte el pin 25 (A15) del 6502 al pin 2 (1B) del 74HC00

Conecte el pin 34 (R / W) del 6502 al pin 5 (2B) del 74HC00

Conecte el pin 3 (1Y) del 74HC00 al pin 4 (2A) del 74HC00

Conecte el pin 6 (2Y) del 74HC00 al pin 11 (LE) del 74HC373N

Conecte el pin 11 (LE) del 74HC373N al pin 1 (OE) del 74HC373N

Puede conectar un LED azul a 1Y y tierra, así como 2Y a tierra, esto indicará cuando la puerta está activa.

Finalmente, cambie la línea en el procedimiento onClock de program1 a program2

setDataPins (programa2 [desplazamiento]);

Paso 6: el programa

El programa
El programa
El programa
El programa

El programa 6502-Monitor contiene las dos rutinas 6502 descritas anteriormente.

El programa aún está en desarrollo y está un poco desordenado.

Cuando se ejecuta program2, los retrasos en el bucle () pueden ser 50 o menos e incluso eliminarse por completo. Comentar las líneas Serial.print () también hace que el 6502 se ejecute más rápido. Desconectar el pin 1 (OE) del 373 del pin 11 (LE) produce resultados diferentes. Desconectar el pin 1 y el pin 11 del 373 de las puertas NAND le permite ver qué hay en el bus de datos en cada ciclo de reloj.

Es posible que deba conectar el equipo original a tierra en lugar de dejarlo flotando, ya que las 8 líneas de salida se desactivan si este pin sube. Cuando el pin LE es alto, los pines de salida son los mismos que las entradas. Tomando el pin LE bajo enclava las salidas, es decir, si los pines de entrada cambian, las salidas permanecen iguales.

He intentado que el programa sea lo más sencillo posible para que sea más fácil de entender.

Experimentar con los retrasos le permite seguir exactamente lo que está haciendo el 6502.

A continuación se muestran los dos programas (ambos se ejecutan en la dirección $ 1000) en 6502 Assembler:

programa1

LDA # $ 55

NOP

ROL

STA $ 1010

JMP $ 1000

El ROL rota el contenido del acumulador un bit a la izquierda, lo que significa que los $ 55 ahora se convierten en $ AA.

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

programa2

LDA # $ 01

STA $ 8100

ADC # $ 03

STA $ 8100

JMP $ 1005

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

En el programa 2 ahora hay una dirección física $ 8100 que es donde se encuentra el 74HC373 en el bus de direcciones.

es decir, A15 del 6502 es 32768 ($ 8000) y A8 es 256 ($ 0100) = 33024 ($ 8100).

Entonces, cuando el 6502 escribe en $ 8100 (STA $ 8100), el R / W del 6502 es bajo y los datos en el bus de datos 6502 se bloquean cuando el 373 LE baja. Debido a la puerta NAND 74HC00, las señales se invierten.

En la impresión de pantalla anterior, la segunda escritura se incrementó en 3 (ADC # $ 03) - pasó de $ 7F a $ 82.

En realidad, se utilizarían más de 2 líneas del bus de direcciones para la ubicación específica del 373. Como esta es la única dirección física de entre los posibles 65536, demuestra cómo funciona el bus de direcciones. Puede experimentar con diferentes pines de dirección y colocarlo en una ubicación diferente. Por supuesto, deberá cambiar los operandos de STA a la nueva ubicación. p.ej. Si utilizó las líneas de dirección A15 y A9, la dirección sería $ 8200 (32768 + 512).

Paso 7: Conclusión

Conclusión
Conclusión

He intentado demostrar lo fácil que es poner en marcha un 6502.

No soy un experto en este campo, por lo que agradecería cualquier comentario o información constructiva.

Le invitamos a seguir desarrollando esto y me interesaría lo que ha hecho.

Tengo la intención de agregar una EEPROM, SRAM y un 6522 al proyecto, así como ponerlo en un tablero de tira en el futuro.

Recomendado: