Elección CPU para retro

75 views
Skip to first unread message

Carlos Pantelides

unread,
Sep 30, 2019, 3:25:32 PM9/30/19
to Embebidos32
Hola

Como parte de uno mis ambiciosos y útiles proyectos de aprendizaje del tipo Forzando Brutalmente MD5 (felizmente terminado tras año y medio), planéo implementar en FPGA una CPU de 8 bits tipo black box, mirando la ISA y las especificaciones, sin mirar el diseño, con el propósito de aprender.

Probablemente no la implementaré completa, si no lo necesario para ejecutar algunos programas básicos, en el contexto de otro proyecto. Quizás no implementaría el soporte a interrupciones externas, por ejemplo.

Finalmente, me gustaría conectarle a una de verdad RAM, EEPROM, un led e implementar un blinky real.

Mis candidatas son 6502, 6809e y Z80. Me he hecho una grilla de características y deduje estas ventajas y desventajas de cada una:

6502 Parece la más sencilla y existe un muy agradable emulador que ya he transitado mayormente https://skilldrick.github.io/easy6502, pero no tengo una, aunque seguro consiga una rápido en algún ATARI roto.

Z80 tengo cuatro o cinco y parece tener la mayor comunidad, pero es evidentemente la más compleja, por mucho.

6809e parece ser apenas más complicada que el 6502 y tengo una que probablemente funcione, entiendo que además es la más prolija, pero quizás eso se traduzca en una implementación relativamente más compleja y además es la menos utilizada y con menos recursos de apoyo disponibles.

Por ahora la 6809e es mi preferida, ya que es la primera, única y última CPU que he comprado suelta en mi vida, hace como 30 años y no haberla hecho funcionar representa una frustración de décadas, un factor no técnico

Aparte de abandonar el proyecto, ¿alguien tendría algo que sugerirme?

Gracias y saludos

Marcos Chaparro

unread,
Sep 30, 2019, 4:07:44 PM9/30/19
to embeb...@googlegroups.com
Estás al tanto de la lista de mails de FPGAwars? Hace poco vi un par de ejemplos interesantes hechos en www.icestudio.io:

CPU Z80 + perifericos

image.png

Este es un ejemplo de RISC-V. Por ahi no te interese porque no es ni retro ni sencilla, pero es el futuro y le va a dar de comer a mucha gente.
image.png

El que lleva adelante esos ejemplos es obijuan, y tiene tutoriales muy interesantes que te pueden servir.


Marcos


--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/embebidos32/9be3f1ac-b744-4ea4-979b-78aa96fb4428%40googlegroups.com.

martin ribelotta

unread,
Sep 30, 2019, 4:37:21 PM9/30/19
to embebidos32@
El lun., 30 sept. 2019 a las 16:25, Carlos Pantelides (<carlos.p...@gmail.com>) escribió:
Hola

Como parte de uno mis ambiciosos y útiles proyectos de aprendizaje del tipo Forzando Brutalmente MD5 (felizmente terminado tras año y medio), planéo implementar en FPGA una CPU de 8 bits tipo black box, mirando la ISA y las especificaciones, sin mirar el diseño, con el propósito de aprender.

Probablemente no la implementaré completa, si no lo necesario para ejecutar algunos programas básicos, en el contexto de otro proyecto. Quizás no implementaría el soporte a interrupciones externas, por ejemplo.

Cual seria el objetivo funcional? O sea... a que queres llegar mas allá del objetivo de "aprender arquitectura de procesadores básica" o "implementación de CPUs"?
Puedo suponer que seria correr software viejo? O algun juevo? O simplemente es hacer una implementación de CPU "clasica" de 8bits? Entiendo que es un plus el "old chool design", con maquina de control por microprograma y demás cositas divertidas al ritmo de "Another one bites the dust" o "Maniac" mientras programas en un terminal fósforo verde (o naranja...)
Porque de eso depende mucho la elección...
 
Finalmente, me gustaría conectarle a una de verdad RAM, EEPROM, un led e implementar un blinky real.

Casi que si decimos "old school" podriamos hablar de que es un requisito minimo tener una RAM old school (incluso una DRAM pero ya es pedir demaciado porque los chips no se consiguen tan facil...)
Como dato te comento que en mis años mozos implemente un blinking usando un Z80, un latch y una EEPROM (la RAM eran los registros internos nomas...)
Es una experiencia interesante cuando tu vieja te cocina y estas rascandote todo el fucking dia...
 
Mis candidatas son 6502, 6809e y Z80. Me he hecho una grilla de características y deduje estas ventajas y desventajas de cada una:

Básicamente con eso cubris las dos grandes arquitecturas... al motorola y la intel... (Z80 es un clon del 8080 con mejor tecnología y mas instrucciones... divertidamente usa una ALU de 4bits y un controlador de microprograma que la hace ver de 8 bits)
Por supuesto, 65xx es un clon de 68xx aunque mas reducidas...

 

6502 Parece la más sencilla y existe un muy agradable emulador que ya he transitado mayormente https://skilldrick.github.io/easy6502, pero no tengo una, aunque seguro consiga una rápido en algún ATARI roto.

Estos chips se venden a precio de oro para que los retro apple-boy tengan su AppleI hecha a mano... en si es un procesador bastante bueno en diseño, pero con una arquitectura bastante capada... no es tan facil de implementar la rom de microprograma para emular el comportamiento original, pero si lo que estas buscando es emular a nivel de ISA (y te chupa un huevo el manejo de clocks y demas) entonces es un buen punto de arranque...
Tiene cosas que sobre el HDL no se entienden bien porque tomaron esas desiciones de diseño (por ejemplo el stack en la segunda pagina de 256 bytes que no puede moverse a otro lado (dirección 0x01FF para abajo) y eso viene a cuento de que era mas facil meter un poco mas de bits en la control unit y hacer que el stack pointer incrementara/decrementara via ALU en vez de tener su propio sumador/restador de 16 bits (como tiene el 6809) y que tampoco apetecia hacer muchas operaciones para emular los 16 bits... cuestiones de diseño... ejejejej


Z80 tengo cuatro o cinco y parece tener la mayor comunidad, pero es evidentemente la más compleja, por mucho.

Si bien puede parecer "complejo", estructuralmente es una arquitectura muy limpia y ortogonal... de hecho, tiene mucho estudiado, y otra vez, si es solo a nivel de ISA, y no queres meterte en el comportamiento a nivel de clocks o de microinstrucciones no es mucho mas difícil que los otros procesadores...
Eso si, tenes bastantes cosas molestas que en el HDL no se entiende demasiado el porque ocurren... muchas de ellas derivadas del hecho de tener una ALU de 4bits y tener que emular operaciones de 8bits vía unidad de control (de yapa usaban un PLA diseñado a manopla en múltiples etapas)
Por supuesto, al tener varios registros, la ortogonalidad brilla por su ausencia ya que era muy difícil lograr un buen fanout para los buses internos con esa tecnología...
Lo que si es un reto interesante, es implementar las operaciones de 16 bits de este micro, parece que los diseñadores de la rom de microprograma dijeron: "ya que hacemos 20 hagamos 21 e implementemos operaciones de 16 bits con una ALU de 4 bits"...
En contraposición, tengo que decir que quiero mucho esta arquitectura porque fue la primera que programe a manopla y con papel y lápiz...

6809e parece ser apenas más complicada que el 6502 y tengo una que probablemente funcione, entiendo que además es la más prolija, pero quizás eso se traduzca en una implementación relativamente más compleja y además es la menos utilizada y con menos recursos de apoyo disponibles.

Este micro es realmente especial... si bien es un micro de 8 bits podría considerarse una arquitectura de 16 bits porque tiene casi todas las condiciones para considerarse una (acumulador de 16 bits partido en dos de 8 bits, A y B) mas registros indexadores de 16 bits ortogonales al acumulador (casi que se pueden usar como acumuladores opcionales)
Y lo mas importante... implementa modo usuario y supervisor (de hecho tiene dos stack pointer, U y S) con lo que, la complejidad de implementar todo el bicharraco se incrementa...
 
Por ahora la 6809e es mi preferida, ya que es la primera, única y última CPU que he comprado suelta en mi vida, hace como 30 años y no haberla hecho funcionar representa una frustración de décadas, un factor no técnico

Eso es una opción de peso muy grande... ahora, esa CPU era tremendamente cara!!! Es como decirme hoy, hey me compre una ZSeries de IBM!!!!
 
Aparte de abandonar el proyecto, ¿alguien tendría algo que sugerirme?

Pregunto... el asunto viene por algo como "old is gold" o porque consideras que las cpu de 8 bits son mas simples que una de 32 bits?
Porque realmente, yo antes que implementar un 6502 o un Z80 preferiría mil veces implementar un RISC-V por nivel de complejidad...
En esencia, la complicación principal que veo en todas estas arquitecturas es que tienen un datapath exiguo (como dije antes, algunos son de 4 bits incluso) y tiran todo de microinstrucciones, así que casi podríamos hablar de un emulador de CPU de 8 bits sobre una arquitectura de 4 bits...
El datapath mínimo se debe a la complicación de transistores extra y el poco fanout que se podía lograr en aquellos días, contra la simplicidad de armar una ROM o un PLA de uno o mas niveles que resolviera todo con mas clocks...
 
Gracias y saludos

Contamos porfa como sale esto que es super interesante... es mas, te diria que es un proyecto tan lindo que hasta merece una placa FPGA diseñada para eso jejejeje (con una ice40 o algo asi...) 

Diego Dujovne

unread,
Sep 30, 2019, 4:39:20 PM9/30/19
to embeb...@googlegroups.com
Carlos,
           Solo para agregar un poco más de ruido, la Color Computer 2 (CoCo2) 
de Tandy fue mi primera computadora. y está basada en el 6809e. Sé que hay 
emuladores dando vueltas, y además, en la página de la wikipedia:


dice que también hay quienes hicieron una versión del procesador en FPGA.
Saludos,

                                Diego Dujovne

Santiago Germino

unread,
Sep 30, 2019, 7:32:40 PM9/30/19
to Embebidos32
Hola! Podes implementar MIPS. Es una arquitectura de 32 bits de los 80's, es load-store, muy simple y mas parecida a ARM que todas las de los 70's de 8 bits que son muy restrictivas y poco claras, creo que con esta te vas a divertir y vas a aprender mas.

La ventaja es que hay muchisimo material educativo ya que se ve (o se veia) en detalle en la materia Arquitectura de Micros de muchas universidades de afuera.
Hay simuladores libres que te muestran en detalle que pasa con cada instruccion ejecutada, etc. Ademas, podes usar GCC en MIPS, pero su assembler es igualmente muy facil (mas que el thumb2 de ARM!).

Incluso ahora la arquitectura es libre, quiza para competir con RISC-V: https://www.mipsopen.com/

Saludos!
Santiago.

martin ribelotta

unread,
Sep 30, 2019, 7:34:42 PM9/30/19
to embebidos32@
Pregunta... porque no una arquitectura moderna como stm8 [1], o los superchinos padauk [2]?

No digo algo tan arcaico como mcs51 o hc08 pero tal vez algo como avr...

El problema vendría por la parte de las licencias del ISA, por eso el chinisimo padauk es super jugoso...

Lo ideal seria una arquitectura con buen soporte de toolchains open source (excluidos pic que son una garcha arquitectonicamente hablando jajajajaa)



El lun., 30 sept. 2019 a las 16:25, Carlos Pantelides (<carlos.p...@gmail.com>) escribió:

Salvador Eduardo Tropea

unread,
Oct 1, 2019, 8:08:49 AM10/1/19
to embeb...@googlegroups.com

On 30/9/19 16:25, Carlos Pantelides wrote:
> *6502* Parece la más sencilla y existe un muy agradable emulador que
> ya he transitado mayormente https://skilldrick.github.io/easy6502,
> pero no tengo una, aunque seguro consiga una rápido en algún ATARI roto.
¿Viste esto?

http://visual6502.org/JSSim/index.html


Es el 6502 a nivel de transistores levantado a partir de fotos del die.
Por lo que del 6502 tenés "el circuito", eso te puede llegar a
interesar. Como para contrastar tu implementación con la original.

Yo la primer CPU que implementé fue el PIC1684, luego el ATmega32 (el
original del PIC)


Saludos, SET

--
Ing. Salvador Eduardo Tropea http://utic.inti.gob.ar/
INTI - Micro y Nanoelectrónica (CMNB) http://www.inti.gob.ar/
Av. General Paz 5445
Tel: (+54 11) 4724 6300 ext. 6919 San Martín - B1650KNA
FAX: (+54 11) 4754 5194 Buenos Aires * Argentina




Carlos Pantelides

unread,
Oct 1, 2019, 10:11:05 AM10/1/19
to Embebidos32
bueno, muchas gracias por todas la ideas/datos/etc.

Contesto y agradezco con un cierto orden

El proyecto que enmarca este subproyecto es tener una CPU en FPGA tal que pueda implementar troyanos de hardware. No me interesa ejecutar ningún software existente en particular, no necesito mucho más que blinky, no me interesa reproducir el comportamiento original.

Caja negra, no me importa si la ALU es de 4 bits, FSM, lo que sea, voy a usar la que me convenga, voy a exigir al máximo de mi ingenio, no es un proyecto de ingeniería donde tengo que considerar performance, optimizaciones, buenas prácticas, consumo, gate count, costos, si logro respetar los ciclos utilizados en las operaciones, mejor, si no, mala suerte.

Un plus sería poder compilar código con herramientas existentes open source para disminuir la complejidad del proyecto, pero sólo eso, un plus.

Marcos, FPGAwars, interesante más que tengo un iCEStick, pero no me puedo subir a los hombros de gigantes, tengo que arrastrame por el barro hasta aprender como hice con MD5 en SIMD, GPU, FPGA, desde el primer día tuve una implementación de un pipeline a mano pero recién la miré tras terminar y la verdad es que no la entendí, la mía es mucho más simple y usa un tercio de recursos, aunque es verdad que sólo procesa un bloque sin encadenar los siguientes. Pero aprendí a hacer un pipeline, Verilog, a usar Vivado y un poco de emulación.

Diego, CoCo2, eso me va a servir para cuando me bloquée.

Santiago: no había considerado MIPS o RISC-V, podrían ser un plan C si fallo

Salvador: http://visual6502.org/JSSim/index.html, si, lo había visto aunque olvidado tambien.


Ruso: tengo esa 6809e pues una persona muy sabia me sobreestimó y me la recomendó, pero a esa edad lo único que tenía disponible era tiempo, me faltaba conocimiento, voluntad y plata. No salió tan cara, creo que u$s 5, que era como la mitad de mi sueldo en 1988, la verdad no recuerdo.

Con respecto al mundo fìsico, tengo un cajón lleno, muy lleno, incluida SRAM de 2KB, uarts,

Lo que me queda claro es descartar 6502, fundamentalmente por que no tengo uno ni ganas de gastar plata en conseguirlo.

La verdad es que para lo que necesito me alcanzaría con implementar, y me van a tener que ayudar pues hace días que quiero recordar el nombre y no me viene, esa máquina que Saubidet había tomado de un libro francés que era tan sencilla que para hacer saltos condicionales tenía que reescribir el ejecutable en el momento, plancharle un JMP. De esa hice en ese momento un emulador casi completo en java, pero como que me da una cierta aversión.

No habiendo objeción mayor, el camino que voy a tomar es 6809e, fundamentalmente por ser mi asignatura pendiente, algo completamente irracional. Si fallo o termino rápido, volveré a preguntar y evaluaré tambien con lo aprendido y experimentado hasta ese momento.

Ruso: "contanos", por supuesto, además de que seguro algo voy a preguntar sobre la marcha, supongo que comenzaré en diciembre.

Gracias y saludos


--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/embebidos32/jjgMVo2H70c/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a embebidos32...@googlegroups.com.
Para ver este debate en la Web, visita https://groups.google.com/d/msgid/embebidos32/df816d09-22e9-198e-b857-33c685b1d211%40inti.gob.ar.


--
Reply all
Reply to author
Forward
0 new messages