Tabla de contenido:

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

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

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

Continuando aún más, ahora he agregado un Octal Latch, 8 LED rectangulares y una matriz de resistencias de 220 Ohm a la placa principal. También hay un puente entre el pin común de la matriz y la tierra, de modo que los LED se pueden apagar. La puerta 74HC00 NAND se ha reemplazado por una puerta 78LS08 AND, el cableado a la puerta también se ha modificado. La puerta AND significa que el 6522 ahora se encuentra en $ 6000 en lugar de $ E000.

También hay un pin para la conexión de un reloj externo para impulsar el 6502. Con esta conexión, no es necesario que el MEGA proporcione una señal de reloj. El MEGA todavía monitorea lo que está sucediendo con el procesador como antes.

Usé un 74HC373 de 20 pines para el pestillo porque tenía algunos. Esto estuvo bien cuando estaba en la placa de pruebas, pero un 74HC573 es compatible con bus y habría ahorrado mucho cableado. El UCN5801A, que es un IC de 22 pines, también se podría considerar en el circuito, pero el cableado será ligeramente diferente.

El LED superior de color naranja es un indicador de encendido y el rojo de la parte inferior izquierda indica cuándo se está realizando una escritura. Esto último será insignificante si la placa se ejecuta a velocidades más altas.

El circuito modificado está arriba (con el 74HC573).

Paso 1: Programas de demostración

Programas de demostración
Programas de demostración

Se incluyen dos programas de demostración sencillos en el monitor 6502 y su código desmontado está aquí.

Este programa carga 1 en el registro 6502 A y lo almacena en el pestillo. Luego agrega 1 al registro A y lo almacena en el pestillo. Luego vuelve a $ 1005 y el proceso se repite para siempre.

* = 1000

1000 A9 01 LDA # $ 01 1002 8D 00 41 STA $ 4100 1005 69 01 ADC # $ 01 1007 8D 00 41 STA $ 4100 100A 4C 05 10 JMP $ 1005 100D. END

Este programa primero configura el DDR del puerto B del 6522 en salida. Luego almacena $ 55 (B01010101) en el puerto y en el pestillo. El registro A luego gira 1 paso a la derecha y ahora contiene $ AA (B10101010). Esto se almacena nuevamente en el puerto B y el pestillo. El programa regresa a $ 1005 y continúa para siempre.

* = 1000

1000 A9 FF LDA # $ FF 1002 8D 02 60 STA $ 6002 1005 A9 55 LDA # $ 55 1007 38 SEC 1008 8D 00 60 STA $ 6000 100B 8D 00 41 STA $ 4100 100E 6A ROR A 100F 8D 00 60 STA $ 6000 1012 8D 00 41 STA $ 4100 1015 4C 05 10 JMP $ 1005 1018. END

Los de ojos agudos pueden notar que los LED de colores muestran un patrón diferente al de los verdes. Esto se debe a que el cable común está conectado a 5v en los de color y el común en los verdes está conectado a tierra.

Cambie esta línea de código a program2 o program3.

setDataPins (programa3 [desplazamiento]);

Un ensamblador y un desensamblador 6502 son herramientas útiles para ayudar a codificar sus programas.

Paso 2: agregar una EEPROM

Agregar una EEPROM
Agregar una EEPROM
Agregar una EEPROM
Agregar una EEPROM
Agregar una EEPROM
Agregar una EEPROM

Para la placa EEPROM, utilicé una placa de tira de 950 x 650 mm y pines de cabezal macho de 19 mm para permitir que la placa borre la que está debajo. Esta placa se conecta a la placa 6502 a continuación. La EEPROM es un ATMEL 28C256 que tiene 28 pines y contiene 32k x 8 bits de memoria. Esto es más que adecuado para los pequeños programas que se utilizan en la actualidad.

No he hecho un diagrama de circuito para esta placa, pero es bastante sencillo cómo se conecta a la placa 6502 a continuación. Estos chips EEPROM no son compatibles con el bus, por lo que deben conectarse a los pines individuales, de ahí todos los "espaguetis verdes y blancos". He resuelto el problema del puenteo en la placa anterior conectando las líneas de datos en la parte inferior de la placa.

Los 14 pines de dirección de la EEPROM se conectan a los pines correspondientes en el lado izquierdo (cables verdes) y los pines de E / S a los pines de datos a la derecha (cables blancos). El pin 27 (WE) está conectado al pin 28 (5v), el pin 22 (OE) está conectado a tierra y el pin 20 (CE) está conectado a una puerta NAND. Las 2 entradas de la puerta NAND están conectadas a A15 en el tablero principal. Esto significa que cuando este pin sube, la puerta NAND da una señal baja al pin CE de la EEPROM que lo activa. Con esta configuración, significa que la EEPROM solo puede ser leída por el 6502.

Como la EEPROM se encuentra entre los 32k superiores en el mapa de memoria, significa que $ FFFC y $ FFFD pueden contener la dirección de inicio del 6502 después de que se haya restablecido. Dado que el 6522 tiene sus direcciones entre $ 6000 y $ 600F y el pestillo está en $ 4100, detiene cualquier conflicto de memoria.

El vector NMI ($ FFFA y $ FFFB) y el vector BRK / IRQ ($ FFFE y $ FFFF) también se pueden escribir de la misma manera.

Paso 3: Programación de la EEPROM

Programando la EEPROM
Programando la EEPROM
Programando la EEPROM
Programando la EEPROM

Para almacenar un programa en la EEPROM, necesita un programador. Hice uno a partir de una placa de tira, un Arduino Pro Mini, un par de 74HC595 y un zócalo ZIF. Originalmente, el programador se hizo para un AT28C16 que tiene menos líneas de dirección que el AT28C256, por lo que tuvo que ser modificado.

El diagrama del circuito muestra cómo cablear ambas EEPROM. No está claro en la foto que los dos chips 595 estén al revés y no como se muestra en el diagrama. Los pines 1 a 7 de 595/1 se alinean con A1 a A7 de la EEPROM independientemente de cuál se utilice. Esto ahorra 7 cables de conexión. La placa ahora se ve un poco apretada y esto se debe a que originalmente usé un zócalo DIL de 24 pines que ahora ha sido reemplazado por el zócalo ZIF de 28 pines mucho más grande.

Se incluye un programa que funciona con mi tablero. El programa funcionará con cualquier Arduino y 595 en un circuito como se muestra. Elegí un 5v Pro Mini porque es compacto y lo suficientemente barato como para dejarlo en la configuración.

Paso 4: los programas EEPROM

Los programas EEPROM
Los programas EEPROM

Hay tres programas simples en el programador EEPROM. Para usarlos, simplemente descomente la línea que desea usar.

// Leer desde el puerto A de 6522

// datos de bytes constantes = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

El programa muestra un volcado de memoria cuando ha terminado. La parte del programa a continuación le brinda control total de lo que desea escribir o borrar, establece $ FFFC y $ FFFD y luego muestra el contenido de un rango determinado. Simplemente elimine los comentarios o modifique los parámetros según sus necesidades. Las direcciones también se pueden ingresar en formato decimal.

// borrarEEPROM (422, 930, 0x41); // Úselo para borrar todo o parte de EEPROM - inicio, final, byte

Serial.println ("Programación de EEPROM"); cantidad = program_numeric_data (0x1000); writeEEPROM (0x7ffc, 0x00); // Establecer $ FFFC para 6502 writeEEPROM (0x7ffd, 0x90); // Establecer $ FFFD para 6502 // escribirEEPROM (0x1000, 0xA9); // Escribe 1 byte de datos Serial.println ("hecho"); Esquema de cadena = "Escrito" + (Cadena) cantidad + "bytes"; Serial.println (esquema); Serial.println ("Leyendo EEPROM"); printContents (0x0000, 0x112f); // Establecer rango para mostrar printContents (0x7ff0, 0x7fff); // Lee los últimos 16 bytes en EEPROM

Una salida abreviada del programa está arriba.

Paso 5: Ejecutar el 6502 desde EEPROM

Ejecución del 6502 desde EEPROM
Ejecución del 6502 desde EEPROM
Ejecución del 6502 desde EEPROM
Ejecución del 6502 desde EEPROM
Ejecución del 6502 desde EEPROM
Ejecución del 6502 desde EEPROM

La EEPROM programada ahora se puede insertar en su tablero y este piggy backs en el tablero principal 6502 que piggy backs en el MEGA. Las fotos de la vista lateral y superior muestran cómo encaja todo.

El 6502 ahora puede leer el vector de inicio de $ FFFC y $ FFFD (que es $ 9000) y luego saltar al programa que está almacenado allí. El MEGA todavía está proporcionando la señal de reloj y su programa debe modificarse para proporcionar solo la señal de reloj y monitorear el 6502. Se proporciona un programa modificado para hacer esto.

La foto en ejecución muestra este programa en ejecución.

9000 LDA # $ 00 A9 00

9002 STA $ 6003 8D 03 60 9005 LDA # $ FF A9 FF 9007 STA $ 6002 8D 02 60 900A LDA $ 6001 AD 01 60 900D STA $ 6000 8D 00 60 9010 EOR # $ FF 49 FF 9012 STA $ 4100 8D 00 41 9015 JMP $ 900A 4C 0A 90

Los interruptores están conectados al puerto A y el programa muestra el valor que está leyendo en el puerto B y el 74HC373 (que está oculto en la actualidad). los interruptores están conectados a tierra y los LED están conectados a 5v. El EOR # $ FF corrige el problema del pestillo y el puerto B mostrando diferentes patrones volteando los bits antes de escribir en el pestillo.

Paso 6: señal horaria externa

Señal horaria externa
Señal horaria externa

Si se aplica una señal de reloj al pin en la parte superior de la placa, el 6502 ahora puede funcionar independientemente del MEGA. Por supuesto, también necesita una fuente de alimentación. He experimentado con diferentes relojes e incluso ejecuté el 6502 a 1MHz con un oscilador de cristal. El MEGA no puede seguir el ritmo de velocidades más rápidas, por lo que debe eliminarse.

También probé la salida de un temporizador 555 pero eso no funciona. Creo que podría deberse a que no es una onda cuadrada. Cuando se conectó a una de las salidas del CD4017, impulsó el 6502. Conecté uno de los kits de arriba para intentar obtener una señal de reloj.

Todavía estoy buscando diferentes métodos para obtener una señal de reloj.

Paso 7: Conclusión

He mostrado cómo construir algunos circuitos complejos y hacer que una "computadora" muy simple funcione con una cantidad mínima de partes. Por supuesto, la computadora no puede hacer mucho en la actualidad o es probable que lo haga en el futuro.

A principios de los 80, con mi VIC20, solía maravillarme de la increíble máquina y no tener la primera idea de cómo empezar a montar una. Los tiempos han pasado y también la tecnología, pero sigue siendo agradable volver a lo básico y estar orgulloso de algo que has construido desde cero.

Para desarrollar aún más esta computadora, tengo la intención de poner 2k de SRAM a $ 0000 a $ 2047 y agregar un oscilador de 1 MHz. Probablemente agregue algo como un CD4040 (Contador / divisor de ondulación binario de 12 etapas) para que pueda aprovechar diferentes velocidades de reloj.

Incluso podría agregar una pantalla LCD para dar salidas de texto en lugar de solo luces intermitentes. El programador EEPROM también deberá modificarse para manejar los programas más grandes necesarios para ejecutar una pantalla LCD.

Aunque el MEGA se está volviendo innecesario para el funcionamiento del 6502, sigue siendo útil para depurar el código de la máquina. Como todo el mundo sabe, el código de máquina siempre contiene errores.

Recomendado: