Core de Z80

Responder
Avatar de Usuario
jotego
Mensajes: 158
Registrado: 11 May 2016, 23:45
Ubicación: Valencia
Contactar:

Core de Z80

Mensaje por jotego » 29 Oct 2016, 10:17

Tras liberar el JT51 he recibido la invitación para unirme al proyecto de "desensamblar" un YM2151 real a través de fotos y sacar el netlist. Coincidencias de la vida, ese proyecto empezó un par de semanas antes de que yo liberase mi código. En estos momentos hay varios equipos tratando de densamblar los distintos chips de Yamaha.

Esto me ha llevado a descubrir que el m68000 está ya casi listo (echad un vistazo aquí) y, lo que nos atañe:

Hay en Opencores una versión del core de Z80 que afirma estar hecha a partir del netlist del Z80 real. Si esto es así, tenemos funcionalidad exacta, incluyendo respuesta a OPs ilegales, ciclos de reloj, etc. Es el A-Z80. Creo que el ZX-UNO usa otro core de Z80 (¿me equivoco?). Si es así, tiene todo el sentido del mundo pasarse al A-Z80.

Avatar de Usuario
Quest
Mensajes: 900
Registrado: 27 Sep 2015, 00:20

Re: Core de Z80

Mensaje por Quest » 29 Oct 2016, 10:49

mcleod_ideafix te responderá más extensamente a esto, pero ya hace un tiempo que estuvo en comunicación con Goran Devic (el autor del A-Z80) para intentar usarlo en el ZX-UNO (cores Spectrum y Sam Coupé) pero había una serie de dificultades que de momento impidieron usarlo (no recuerdo ahora cuáles). También estaba el problema, si no recuerdo mal, de que ocupaba "un huevo" en la FPGA.

El que usamos nosotros es el T80 con modificaciones de mcleod para que los timings sean más exactos. En el caso del Spectrum, lo son, pero en el del Sam Coupé, no. Y para el core de CPC tampoco parece ser adecuado, ya que estas máquinas, según me comentó Miguel, usan /WAIT para la sincronización, cosa que al T80 no es capaz de hacer.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
antoniovillena
Mensajes: 2621
Registrado: 27 Sep 2015, 20:41

Re: Core de Z80

Mensaje por antoniovillena » 29 Oct 2016, 13:49

Aparte de que ocupaba un huevo, otro inconveniente es que es un core muy lento. No permite ser acelerado a 7MHz por ejemplo.

Avatar de Usuario
antoniovillena
Mensajes: 2621
Registrado: 27 Sep 2015, 20:41

Re: Core de Z80

Mensaje por antoniovillena » 29 Oct 2016, 13:52

Tampoco debería ocupar más. Todo lo contrario. El Z80 original tiene una ALU de 4 bits. Esto hace que se empleen menos recursos (puertas lógicas) para implementarlo.

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Core de Z80

Mensaje por mcleod_ideafix » 29 Oct 2016, 16:10

El A-Z80, al menos la versión que probé yo hace unos meses, tiene varios problemas para ser usada con éxito:
- El código está muy ligado a las herramientas de Altera. De hecho algunos ficheros que se usan como parte del core son ficheros generados automáticamente por las herramientas de Altera.
- Hay otra parte del código que es también generado automáticamente por unas herramientas que escribió Goran, que leen y parsean un fichero que contiene la estructura interna de la PLA de decodificación de instrucciones del Z80. El fichero que se genera es monstruoso, a muy bajo nivel, que hace que las herramientas de Xilinx generen un diseño que ocupa como 10 veces la FPGA
- Goran modificó el cóigo para que fuera más amigable con Xilinx, y así conseguí probarlo en ZX Spectrum, SAM Coupé y Jupiter ACE. No funcionó bien con ninguno de esos cores, ya que el core del A-Z80 no está pensado para ser sintetizado, sino simulado. La cantidad de etapas lógicas que tiene para cualquier cosita hace que la velocidad de reloj que se puede alcanzar con él, en un Xilinx, sea de aproximadamente 6 MHz. A esto contribuye el que el A-Z80 usa señales generadas por la lógica como si fueran relojes, y esto es algo que no gusta a las FPGAs.

Por todas estas razones, me temo que el A-Z80, en su forma actual, no nos vale (pero de vez en cuando miro a ver si se ha hecho algun commit al repositorio de OpenCores y pruebo la última versión con la esperanza de que vaya mejor que la anterior). No obstante le he echado el ojo a una modificación del T80 que se hizo para el 1ChipMSX y que corrige alguna de las cosas que tienen que ver con la señal WAIT (aunque otras como los flags en las instrucciones LD A,R siguen sin estar corregidas, años después de que las corrigiese yo). He probado esa versión del T80 con las tres máquinas con Z80 que "dominamos", y funciona bastante bien con las tres (con Spectrum los timings son casi idénticos que con el T80 que lleva ahora, con Jupiter ACE no he visto problemas, y con el SAM Coupé... bueno... se comporta igual que el TV80, pero es que el SAM necesita un repaso de arriba a abajo). Esta versión del T80 será la que, inicialmente, use con el Amstrad CPC.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
jotego
Mensajes: 158
Registrado: 11 May 2016, 23:45
Ubicación: Valencia
Contactar:

Re: Core de Z80

Mensaje por jotego » 29 Oct 2016, 17:46

Ya veo. Gracias a todos por las detalladas explicaciones.

Pensaba que el A-Z80 cogería los circuitos originales y los habría convertido en algo amigable para FPGA manteniendo la fidelidad máxima pero ya veo que está a medio camino aun.

El esfuerzo de desensamblar los sintetizadores de Yamaha está liderado por gente de MAME que busca mejorar la fidelidad de la emulación. Ellos buscan respuestas a preguntas como: "¿cuál era el LFSR usado para generar el ruido?" o "¿cuántos ciclos de reloj tarda en procesar un comando?". Sin embargo para mí el interés está en entender el circuito original. Una vez entendido, reimplementarlo en una tecnología más moderna es un trabajo diferente a lo que MAME busca.

Responder