Como utilizar una memoria EEPROM externa como la flash de un microcontrolador

Hola colegas, mi nombre es Juan David Chica Herrera, soy estudiante de Ingeniería Electrónica y estoy en XI semestre, ya casi termino. Actualmente me encuentro desarrollando una especie de "Consola para Juegos", utilizando un ATmega16A y una pantalla Nokia 1108. Ya pude hacer un juego de carros y me quedó muy chevere, pero desearía poder hacer mas juegos y correrlos en mi "Consola para juegos", la cosa es que la memoria flash del ATmega16A no me alcanza para mas juegos y se me ocurrió la idea de almacenar estoy juegos en una memoria EEPROM y que en vez de que el microcontrolador leyera la flash leyera la EEPROM. O si no se puede demen otras ideas para lograr mi objetivo, básicamente poder hacer juegos almacenarlos en una EEPROM y ejecutarlo en la consolita que ando desarrollando. Muchas gracias y bendiciones :)
 
Amén. Pues así en principio no se puede peeero se podría hacer algún invento:

Conozco muy por encima la arquitectura de los ATmega (vamos que apenas se algo)
Lo primero sería ver si admiten memoria externa mapeada que me suena que no. Si fuera que si, se podría añadir memoria ya programada con el programa que fuese como los cartuchos de las antiguas consolas, solo que perderías un montón de pines.

Lo segundo sería ver si soporta IAP, osea la programación desde la propia aplicación, en ese caso deberías de poner un programa que lea la memoria externa y lo copie en la flash para ejecutarlo. Ojo al número de ciclos de escritura, si estás todo el día programando y probando... En este supuesto podrías usar una SD sin mucho trauma.

Lo tercero sería hacer juegos "interpretados" como se hacía en los basics de los 80, es decir, en la memoria externa pones una serie de instrucciones que interpreta un programa desde la flash interna.

Lo cuarto sería ver si se pueden poner aplicaciones en la ram pero visto el pequeño tamaño de esta, eso limitaría mucho.
 
Si Scooter había pensado en hacer la tercera opción que dice, me tocaría sentarme a pensar muy bien como hacer esa compatibilidad de instrucciones con un programa interno del microcontrolador. Amigo muchas gracias!!!
 
El dato de la eeprom se multiplica por dos y hace de puntero a una tabla de vectores que apuntan a cada una de las subrutinas.

Ejemplo, la primera instrucción que llamamos 00h empieza en la dirección 1000h, en la tabla de vectores habrá un DW 1000h aí que lees 00 lo multiplicas por 2 y da 0 y lees el vector que está en la posición 0 y 1, con ese vector saltas a donde diga.
Si lees una instrucción codificada como 1 lo multiplicas por 2 y dará 2, lees el vector que está en 2 y 3 y saltas a lo que te indique.
Si la dubrutina tiene parámetros, lo que haces es leer de la eeprom los siguientes datos e incrementar el "contador de programa" para que al hacer retorno de subrutina esté apuntando a la siguiente instrucción ejecutable.

Pseudocódigo.

Reseteo "contador de programa" = 0
Bucle:
leo eeprom "contador de programa"
multiplico por 2
cargo vector que está en posición y posición+1
salto a vector
Verifico tecla "stop" o o que sea para parar el programa
incrementa "contador de programa"
Salta a bucle

'Subrutinas (cada una es lo larga que sea)
Subrutina1: el código que sea.... y retorno de subrutina
Subrutina2: el código que sea.... y retorno de subrutina
Subrutina3: el código que sea.... y retorno de subrutina
Subrutina4: el código que sea.... y retorno de subrutina
Subrutina5: el código que sea.... y retorno de subrutina
Subrutina6: el código que sea.... y retorno de subrutina

'Tabla de vectores
Vector1: DW Subrutina1
Vector2: DW Subrutina2
Vector3: DW Subrutina3
Vector4: DW Subrutina4
Vector5: DW Subrutina5
Vector6: DW Subrutina6
 
Atrás
Arriba