Y usar un PIC como micro? Seria un disparate muy grande?
En el PIC se pondria un programa que vaya tomando las instrucciones de la RAM, de la posicion a la que apunta el program counter, y las interpretaria. La ventaja es que el "microcodigo" del PIC permitiria defiir las instrucciones que quisieramos, aunque no se si es posible por que nunca lo vi implementado. Pero me parece que seria posible....
Buenisimo!
Esa es la ventaja de usar un PIC...tendrias un CPU "flexible", cuyo microcodigo puede emular a un micro real (6502) o algo totalmente a medida.
Te copio un post que tengo en mi foro (sin publicar, en borrador) con las ideas que se me han ocurrido en las ultimas semanas:
[hr]
Hace tiempo que tengo la idea de diseñar “algo” que se pueda programar. Concretamente, me gustaría hacer un pequeño y muy modesto ordenador. Algo que de alguna forma se aproxime a lo que eran las “home computers” de hace 25 o 30 años.
Obviamente, se puede usar tecnología más moderna para hacer más fácil el desarrollo. Sin embargo, me gustaría mantener el proyecto lo más sencillo que fuese posible, como para que llegue a buen puerto. En todo caso, siempre será posible hacer una “versión 2” con mejores características que esta.
No he encontrado aún un libro que me resulte adecuado como para encarar el proyecto, pero no dudo de que en algún lado existe, así que sigo buscando.
Una de las dudas más recurrentes que tengo es si es posible usar como microprocesador de este ordenadorcito un PIC. A veces creo que si, a veces creo que no. Seguramente me ayudarán a decidir.
De forma desordenada, estas son algunas de las ideas que tengo para la “versión 1”
Usar un PIC de 40 pines y 20MHz como “cerebro”.
Usar 8 pines de E/S como bus de datos bidireccional, al que se conectarían los “periféricos” (teclado, pantalla) y la memoria
Usar 3 pines como “bus de control”, lo que permitiría utilizar hasta 8 periféricos conectados al bus de datos (1)
Usar 14 (o 16) pines como bus de direcciones, lo que permitiría tener 8 (o 64) KB de memoria (2)
Usar una EEPROM con las rutinas básicas -una especie de BIOS- que al arrancar se pasan a memoria RAM
Usar una RAM más o menos rápida en la que se copiaría el programa a ejecutar (3)
Usar un teclado PS/2 convencional
Usar un LCD de 4x20 como pantalla
Usar el puerto serie o USB para enviar programas o datos desde y hacia una PC
Usar una tarjeta FLASH como “disco duro”.
Puertos E/S con un 8255
(1)Multiplexado, lógicamente.
(2)El chip de (3) tiene 8192 bytes de RAM estática. Se pueden usar varios de ellos.
(3)RAM 6264: web.mit.edu/6.115/www/datasheets/6264.pdf
La idea es dotar al programa que va en el PIC de un ….”interprete” capaz de ejecutar las instrucciones que están almacenadas en la RAM. Estas pertenecerían a un “lenguaje de programación” propio, que también habría que escribir. Hay que trabajar duro para definir eso, pero las instrucciones serian semejantes a las de un PIC: leer una posición de memoria, el acumulador, operar con datos o registros, etc. Habrá que definir un registro de estado, esas “cositas” que hay dentro de un micro.
Hay que recordar siempre que este programa NO SE EJECUTA EN EL PIC, sino que es ejecutado POR el PIC. Es un reto ENORME, tanto desde el punto de vista del hardware, como (sobre todo) desde el software, pero creo que puede hacerse.
El lenguaje del cacharro:
Esta parte es fundamental. Hay que pensar, por ejemplo, de cuantos bits van a ser las instrucciones. En un PIC son de 14, y limitan bastante el tamaño de la memoria y demás. ¿16 bits serian suficientes (cada una ocuparía dos bytes en la RAM)? Es posible que no. Las veces que he pensado en esto (generalmente antes de dormir) me parece que seria mejor usar 24 bits por instrucción. Pero 3 es un numero de bytes bastante feo para manejar, y 4 bytes (instrucciones de 32 bits) pueden ser un desperdicio, ya que consumiríamos mucha RAM.
Dejando eso se lado, creo que bastaría con crear un registro de estado, un par de registros de trabajo y las instrucciones para operar con ellos y el contenido de la memoria. Estos registros serian simplemente una variable dentro del PIC, que toma los valores determinados por las instrucciones que va leyendo de la RAM y “ejecutando”.
¿Es un disparate total? ¿Puede hacerse? ¿Vale la pena semejante trabajo solo por el desafío que implica?
[hr]
Lo pongo aca antes que en mi propio foro ;D ;D ;D
PD: EXCELENTE el libro de Ciarcia....lo estoy imprimiendo, y aunque no usemos un Z80, tiene 1000 ideas aprovechables.
He leido toda la tarde...
Me parece (por ahora) que un Z80 es la mejor opcion para un primer proyecto de este tipo. ¡Hay mucha documentacion!
¿Alguien sabe si las memorias del Spectrum (4116) se consiguen en alguna parte?
Self Proclaimed Commodore Guru
15 años atrás
Self Proclaimed Commodore Guru
Usá SRAMs que son faciles de conseguir y de usar, con una 26256 que sacas del cache de una 486 o pentium, ya tenes 32K de RAM.
Con las DRAM aparte del tema del refresco (bastante simplificado en un z80 que te indica cuando hacerlo), el diseño del circuito tiene que hacerse de cierta manera para que las lineas de datos no crucen las de alimentación, etc.