TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: aitopes en 25 de Mayo de 2011, 13:09:22

Título: Altair 8800 clone [con PIC18F4550]
Publicado por: aitopes en 25 de Mayo de 2011, 13:09:22
Hola!

Hace algún tiempo, buscando la forma de llevar a buen puerto el proyecto del "Ordenador con un PIC de 40 pines (http://www.ucontrol.com.ar/forosmf/proyectos-con-pic/ordenador-basado-en-un-pic-de-40-pines/msg19193/#msg19193)" comencé a indagar un poco sobre la "arquitectura" de los primeros ordenadores personales. Asi fue como -inevitablemente- me encontré mirando una y otra vez los esquemas y manuales del Altair 8800.

Analizar esos circuitos me llevaron dos conclusiones. La primera de ella es que nunca voy a poder hacer un ordenador basado en un PIC que pueda ejecutar un programa a una velocidad "razonable". Y la segunda, que quizás no sería tán complicado encarar la construcción de un "clon" de un ordenador que está a punto de cumplir los 40 años. Así fue como nació este proyecto.

El Altair, del que pueden encontrar cientos de web con mucha informacion (o leer una entrada en la zona "museo" de uControl (http://museo.ucontrol.com.ar/index.php?title=Altair_8800)), era un ordenador muy limitado (según nuestros estándares) que poseía un microprocesador Intel 8080 de 8 bits (bus de datos de 8 bits, de direcciones de 16 bits), que estaba originalmente equipado con 256 bytes de RAM (ampliables a 64KB o mas), sin teclado ni monitor (aunque se podian agregar "terminales" de video), etc. Este era su aspecto:

(http://museo.ucontrol.com.ar/images/3/3c/Altair_8800_1.jpg)

Si quería crear un clon de está máquina, lo primero sería poder "emular" el micro Intel 8080. Y por eso comencé. Usando JALv2, durante unos 20 o 30 días me dedique a escribir un programa de unas 3000 líneas que es capaz de tomar uno a uno los bytes de una memoria "simulada", ver a que opcode del i8080 corresponde, leer los operandos correspondientes (si existen) y ejecutarla. Durante esta "ejecución" se actualizan los valores de los registros, memoria, etc, tal como si fuese un micro real. Aquí les pongo algunos vídeos de ese programa ejecutando pequeños programas en ASM del i8080 y mostrando el estado de los registros y demás en un LCD:




Ejemplo de como el chip 18F4550 simula un Intel 8080 al sumar dos números de 16 bits.

(Hay algunos vídeos más en mi canal de Youtube (http://www.youtube.com/user/Aitopes?feature=mhum))

En este momento, el código (pobremente depurado) que corre el PIC es capaz de ejecutar unas 65 mil instrucciones ASM del i8080 por segundo. Esto es unas 10 veces mas lento que el micro original. Pero....funciona.  ;)

Una vez que conseguí que un PIC18F4550 lograse hacer las cosas que normalmente hace un i8080, llegó el turno de comenzar a pensar en como implementar el panel frontal. Después de analizar un poco el asunto y molestar a varios amigos del foro en privado, me convencí de hacer una placa de circuito impreso enorme, sobre la que montar directamente los LEDs, las llaves y toda la electrónica necesaria. Quedó un PCB de dos caras, que mide unos 37x12 centímetros. Semejante tamaño no es fruto de la cantidad de integrados involucrados, sino por que intenté que el tamaño final de este clon fuese el mismo que el de la máquina original. Aqui hay algunas fotos del mismo:

(http://www.ucontrol.com.ar/forosmf/temas-de-administracion/1-2-3-probando/?action=dlattach;attach=9153)

(http://www.ucontrol.com.ar/forosmf/temas-de-administracion/1-2-3-probando/?action=dlattach;attach=9155)

(http://www.ucontrol.com.ar/forosmf/temas-de-administracion/1-2-3-probando/?action=dlattach;attach=9157)

Y finalmente, llaves y LEDs, a la misma altura para que luego quedasen bien al insertarlos en el frente:

(http://www.ucontrol.com.ar/forosmf/temas-de-administracion/1-2-3-probando/?action=dlattach;attach=9159)

(http://www.ucontrol.com.ar/forosmf/temas-de-administracion/1-2-3-probando/?action=dlattach;attach=9161)

(http://www.ucontrol.com.ar/forosmf/temas-de-administracion/1-2-3-probando/?action=dlattach;attach=9163)

La idea era poner, como frente, un acrílico. Pero una cosa es tener la idea, y otra muy diferente concertarla. Afortunadamente, un amigo del foro Retrocomputación que vive en Capital Federal encontró una casa que trabaja en acrílicos, y con un sistema láser me lo perforaron y grabaron todos los "labels" de los elementos del panel frontal.

Así quedó el "clon" con el acrílico ya perforado y grabado, listo para usar:

(http://www.ucontrol.com.ar/forosmf/temas-de-administracion/1-2-3-probando/?action=dlattach;attach=9165)

(http://www.ucontrol.com.ar/forosmf/temas-de-administracion/1-2-3-probando/?action=dlattach;attach=9167)

(http://www.ucontrol.com.ar/forosmf/temas-de-administracion/1-2-3-probando/?action=dlattach;attach=9169)

(http://www.ucontrol.com.ar/forosmf/temas-de-administracion/1-2-3-probando/?action=dlattach;attach=9171)


Obviamente, no se parece mucho al original. El problema va a ser conseguir un gabinete adecuado, parecido al de la foto que ves más abajo, y -si es posible- más adelante cambiar el frente por uno que no sea transparente y tenga la chapa de aluminio con el nombre de la máquina, etc. Este es el gabinete que tenia la máquina original.

(http://1.bp.blogspot.com/_ms_ATMCR9jA/TJP12kYl_lI/AAAAAAAACik/OmJti2oMCtU/s1600/altair8800.jpg)

Y aquí hay un vídeo de una de las primeras pruebas de los registros de desplazamiento del frente:


A medida que vaya teniendo más material para mostrar pasaré por aquí para postearlo. La idea es que este clon se comporte igual que el original, aunque a una velocidad menor. Obviamente, para jugar un poco va a venir muy bien.

Para terminar, les dejo un video de la máquina "de verdad", para que tengan una idea de como se programan estos bichos, usando las llaves como "teclado" y los LEDs como "pantalla":


Antes de terminar (por ahora) no puedo dejar de dar las gracias a todos los que me ayudaron a que este "clon" puedise existir. Amigos, GRACIAS!

¡Nos vemos pronto!


PD: No logré poner los videos de Youtube como corresponde.....ni bien me acuerde como se hace edito y los arreglo ;)
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: SavageChicken en 27 de Mayo de 2011, 15:43:34
Encuentro genial lo que has hecho Ariel, te felicito.

Una pregunta, en lugar de usal JALv2, no te atreves a intentar hacer el código directamente en assembler para lograr una velocidad más cercana (si no igual) a la del original Altair 8800?

Saludos y mis felicitaciones nuevamente.  8)
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: LABmouse en 27 de Mayo de 2011, 17:44:24
Felicidades amigo, una muestra mas que con dedicación todo se logra.

SALUDOS!

Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: aitopes en 31 de Mayo de 2011, 15:37:30
Gracias por los comentarios!!!!

En este momento estoy terminando de dejar todo funcionando. Quiero usar la EEPROM que agregue como una especie de "disco duro", para guardar hasta 128 programas de 256 bytes cada uno, y agregar la posibilidad de que esos programas puedan transferirse desde y hacia una PC via USB (todo está previsto en la placa). No estoy seguro de que la memoria del PIC alcance para el tema USB.

Cuando eso esté implementado, voy a intentar migrarlo a ASM. El programa, contra todo lo que pueda parecer a primera vista, no es muy complejo. Y lo tengo todo separado en funciones, por lo que la migracion podría ser bastante sencilla.

Ya les contaré como va todo ;)

Gracias de nuevo!

Un abrazo.
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: SavageChicken en 01 de Junio de 2011, 15:17:35
Si te animas a usar ASM, vas a descubrir que no es tan complicado como lo pintan, quizá da mas trabajo hacer algunas cosas pero pienso que para emular un microprocesador vas a encontrar que te facilita la vida, porque seguramente muchos de los opcodes del Altair tendrán similitudes con los propios del PIC, hay veces que simular funciones muy básicas de un micro con un lenguaje de alto nivel es mucho más difícil que hacerlo con un lenguaje de bajo nivel, donde el comando puede que hasta sea directo.
Además si quieres una manito me avisas y te ayudo.

Salud  8)
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: NANO1985 en 01 de Junio de 2011, 15:32:41
IMPRESIONANTE! MIS FELICITACIONES! ;-)
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: aitopes en 02 de Junio de 2011, 15:55:15
Además si quieres una manito me avisas y te ayudo.

Salud  8)

¡Lo voy a tener en cuenta! ;)


IMPRESIONANTE! MIS FELICITACIONES! ;-)

Muchas gracias!
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: aitopes en 02 de Junio de 2011, 18:18:33
Hoy me pude poner un rato y "emprolijar" código que tenia en pruebas, en varios archivos, etc, y ya tengo funcionando las funciones de "consulta" de memoria con las llaves "EXAMINE/EXAMINE NEXT", de "carga y actualizacion" mediante la llave "DEPOSIT/DEPOSIT NEXT" y el "RESET".

Dado que tambien ejecuta el código, solo tengo que convertir esa funcion en una que en lugar de ejecutar todo el programa solo ejecute las instrucciones de una, para poder implementar las funciones correspondientes a "RUN/STOP" y "SINGLE STEP".

Calculo que estoy mas o menos al 90% de recorrido total ;)

Luego queda el tema de "PROTECT/UNPROTECT" la memoria (nada grave), hacer que los leds de "status" se correspondan con el estado de la maquina (deberia ser facil, tengo todo en variables y una funcion que escribe cada LED) y guardar/recuperar programas de la EEPROM (hasta 128 programas de 256 bytes cada uno) mediante las dos llaves auxiliares.

El tema de mandar esos programas a la PC via USB lo veo complicado por que estoy quedandome sin recursos en el PIC.

Si algun dia lo paso a ASM, quizás quede lugar para eso. Por ahora, me voy a enfocar en dejarla funcionando y luego veré que hacer.

En un rato subo un video de la maquinucha funcionando :)

Saludos!
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: SavageChicken en 02 de Junio de 2011, 18:47:06
Esperamos el video entonces.

salud  8)
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: aitopes en 02 de Junio de 2011, 19:04:54
Tarda bastante en subir por que mi conexion es muy mala.  :(

Recien me tomé el trabajo de cargar un programa completo que viene en el manual de la maquina original, indicando paso a paso como operar con las llaves para cargarlo y luego comprobar que este ok, y siguiendo los paso uno a uno pude cpmprobar que lo que hace el "clon" se ajusta a la máquina original  :-/

Espero hacerme tiempo el fin de semana para ajustar el tema de la ejecución, y a jugar!  :D
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: aitopes en 02 de Junio de 2011, 19:10:20
Aqui está!

Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: MLO__ en 02 de Junio de 2011, 22:18:14
 :-/ :-/ :-/ :-/

Excelente .. Felicitaciones!!!

Saludos
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: manutek en 03 de Junio de 2011, 08:06:26
te felicito ariel por el trabajo ,por la voluntad y paciencia de programar eso¡¡¡¡  :shock:
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: gera en 03 de Junio de 2011, 12:18:55
Me encanto!! Felicitaciones Ariel!! La verdad q es un laburo impresionante, sin mencionar el acabado impecable :wink:
Pensar q gracias a este aparato bill gates construyo su imperio jaja.
Saludos!!
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: aitopes en 03 de Junio de 2011, 12:48:11
Gracias!
Todavia falta el gabinete, la idea es que quede lo mas parecida posible. De hecho, es posible que cambie el acrilico del frente por uno "ciego" con los colores y tipografias del original....Ya veremos.

Por lo pronto, hoy ejecuté los primeros programas sin problemas. Increiblemente, ejecutaron al primer intento! :-/

Obviamente, había ido probando cada rutina por separado, pero el hecho de "ensamblar" todo, dale a la llavecita y que corra de una es algo que no tiene precio  :D
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: droky en 03 de Junio de 2011, 13:28:35
Me encanta el proyecto!!! :-/ :-/
Felicidades por el logro!
Ahora llama a Ballmer y a Gates y diles que tienes un nuevo Altair que va revolucionar el mundo de la informática  :mrgreen:
Ya te veo en breve con un clon de un Atari 2600 en un DsPIC Ariel!!
Salu2
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: aitopes en 03 de Junio de 2011, 13:53:07
Ja ja ja!
No creo que Bill ya esté para estas cosas :)

Lo bueno que tiene este tipo de máquina es que todavia permitian al usuario saber exactamente que estaba pasando en su interior. Hoy algo asi es imposible, esa "magia" se ha perdido.

Aqui hay otro video que muestra el uso de DEPOSIT/DEPOSIT NEXT:


Y esten atentos: ya puedo correr programas, en modo paso a paso (con SINGLE STEP) o "de corrido" (con RUN/STOP). He filmado un par de videos más, pero tardan bastante en subir. A medida que estén listos los voy posteando. Ya casi estámos al 100%  ;-)
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: manutek en 06 de Junio de 2011, 11:38:22
seria como un boot loader pero de a mano no? ahora la primer llave laburaria como los locos no?
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: aitopes en 06 de Junio de 2011, 12:58:47
No se si es como un bootloader....es como una PC, pero un poquito mas limitada ;)

El PIC toma el byte al que apunta el Program Counter del clon, se fija a que instruccion del Intel 8080 corresponde, y "la ejecuta" (virtualmente), actualizando el PC, registros, RAM (si hace falta), etc,etc,etc....y luego repite eso hasta que se presiona "stop".

Las llaves son para cargar los datos (el programa también) dentro del vector que representa la memoria. Como eran solo 256 bytes usé la memoria del propio PIC. Los LEDs son "la pantalla", te muestran la dirección y el dato que contiene. Es difícil de explicar, pero no tan dificil de hacer. ;)

Saludos!
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: gera en 06 de Junio de 2011, 15:18:05
Tiene alguna interfaz serie para conectarlo a una terminal?? Seria interesante verlo ejecutando el Altair Basic :wink:
Título: Re: Altair 8800 clone [con PIC18F4550]
Publicado por: aitopes en 06 de Junio de 2011, 15:39:11
Deje previsto un "slot de expansion" que entre otras cosas tiene los pines del USB y el RS-232.

Pero......la memoria que tiene no da para eso ;)

Es la versión "base" del Altair, la que salió primero con 256 bytes de RAM. El BASIC requeria de una expansion de al menos 4KB (creo que eso es lo que ocupa el basic, para poder hacer "algo" hacian falta otros 4KB).

Asi que la respuesta es....nopes, no va a poder correr BASIC.

Por ahora me entretengo haciendo programitas que suman numeros, multiplican bytes y word, y cosas "asi de sofisticadas" :)

Saludos!