Nuevo emulador en desarrollo: SpecIde.

Emuladores y aplicaciones que ayudarán a la perpetuación del Spectrum y su software en el futuro

Moderador: Sir Cilve Sinclair

TheMartian
rst 0
Mensajes: 25
Registrado: Dom Mar 25, 2018 2:07 pm

Nuevo emulador en desarrollo: SpecIde.

Mensaje por TheMartian » Dom Mar 25, 2018 3:40 pm

¡Hola!

Pues resulta que el año pasado me arremangué y me puse a escribir mi propio emulador. Supongo que no estaba del todo contenta con los emuladores que ya existían, y también quería poner a prueba mis conocimientos.

El código fuente está aquí: https://github.com/MartianGirl/SpecIde

Probablemente es el emulador que más recursos consume de la historia. El motivo es que me propuse emular todo a nivel de ciclo de reloj, de manera que el código es una especie de traducción (suposición, mejor) de las funciones lógicas de cada componente. Mi idea es, en algún momento, reimplementarlo en una FPGA y ver qué pasa.

¿Qué tengo implementado?

- El emulador compila y funciona en Windows, MacOS y Linux.
- Emula todos los modelos "oficiales" de cinta (48K Issues 2 y 3, 128K, +2 y +2A).
- Soporta los formatos .TAP y .TZX (parcialmente aún). Puede grabar a .TAP.
- Las temporizaciones son bastante exactas (puedo ejecutar la Shock Megademo sin problemas, por ejemplo).
- La CPU emula casi todo lo necesario (registro R, registro WZ... si bien le falta emular correctamente los flags al ejecutar CCF/SCF, y hay un problema con el muestreo de la señal INT).
- El bus flotante está emulado en los 48K y 128K, y *casi* emulado en el +2A (está emulado, pero con un desfase de 3 T-estados).
- Arranca en modo de pantalla completa, detectando bastante bien la resolución del escritorio. Se puede pasar a ventana pulsando F2.
- Emula el altavoz del Spectrum y el AY-8912-3 razonablemente bien.
- Acepta un joystick USB que puede funcionar como Kempston o Sinclair, o mapeando a teclas (de momento estas teclas son fijas)

No sé si me dejo algo.

La interfaz de usuario es inexistente, así que se controla todo mediante opciones de línea de comandos: SpecIde [--48|--issue2|--issue3|--128|--plus2|--plus2a][--kempston|--sinclair] [--pad] [--flashtap] FileName.[tap|tzx]

También hay algunas teclas de función:

F2: Pantalla completa/Ventana
F5: Reset
F8: Grabar de la cinta virtual a un TAP.
F9: Sonido on/off. (Para el sonido de carga, Mays+F9)
F10: Salir
F11: Arrancar/Parar cinta. (Mays+F11 establece una posición en la cinta a la que se puede volver más tarde - Ideal cuando sale lo de "Reset Tape Counter")
F12: Rebobinar al principio de la cinta. (Mays+F12: Rebobinar a la posición guardada)

En fin, eso. Yo lo dejo aquí por si a alguien le gusta. Insisto, es un programa en desarrollo aún, así que tendrá miles de bugs. (Acepto tickets en el repo de GitHub).

Espero que os guste.

Saludetes. :)

zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por zx81 » Dom Mar 25, 2018 8:10 pm

Hola TheMartian,

Es un enfoque distinto e interesante el de tu CPU, que solo he visto una vez en otro core Z80 aunque, además de lento, ese otro core es muy, muy inexacto. Si lo quieres llevar a FPGA después, puede salir algo muy interesante para ser aprovechado en un ZX-Uno o similar. Supongo que si se aplican algunas ideas que he visto en otros emuladores, podrías acelerarlo en un pico.

Eso sí, te aconsejo que pongas binarios para que la gente se lo pueda bajar y probarlo. Compilar las cosas no es fácil y menos aún si haces uso de tantas librerías, alguna de ellas tan relativamente desconocida como la SFML (que no sé ni qué es, la verdad). Esa fue una de las razones para desarrollar mi emulador en Java, JSpeccy, que no hubiera que compilar. En aquel entonces, el Fuse no se incluía en ninguna distribución de Linux y algunas personas sudaban tinta china para conseguir compilarlo.

Animo con ese nuevo emulador. :)

Saludos
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por radastan » Lun Mar 26, 2018 2:50 pm

Pues me parece genial la idea, que quieres que te diga. Yo, hace la tira de años, comencé a desarrollar un emulador a nivel de puertas lógicas con el objetivo de realizar emulaciones reales de funcionamiento de circuitos, con sus tiempos de retardo y todo. La pega es que los profesores me quitaron las ganas y al final lo abandoné:

http://redeya.bytemaniacos.com/scd/scd.html

Tu idea es bastante parecida, salvo que no tienes en cuenta los retardos que se producen a nivel interno (tiempo de propagación de puerta). Ahí es donde está la madre del cordero.

Yo plantee una matriz de puntos, con componentes entre dos o más puntos, y simulando en cada componente el tiempo de retardo y el funcionamiento del componente (tanto a nivel digital como eléctrico).
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

TheMartian
rst 0
Mensajes: 25
Registrado: Dom Mar 25, 2018 2:07 pm

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por TheMartian » Lun Mar 26, 2018 10:31 pm

Hola :)
zx81 escribió: Supongo que si se aplican algunas ideas que he visto en otros emuladores, podrías acelerarlo en un pico.
Imagino que sí, aunque tampoco es mi propósito principal. Querría acelerarlo algo para poderlo echar a andar en una Raspberry Pi en la tele del salón, pero de momento tira suficientemente bien en un PC que tengo conectado a esa misma tele... ;)

Piensa que lo que yo quería era "hacerme un Spectrum lo más Spectrum posible, y que funcionase en la tele del salón y con el mando de la XBox". Creo que eso lo he conseguido: Tengo una cosa sin menús que no soporta snapshots y que hasta hace nada cargaba sólo TZXs a su velocidad real, pero que es muy, muy fiel y tal como arranca se pone en pantalla completa sin hacer nada raro. :lol:

Además, como los componentes, tal y como están hechos, son genéricos y no hacen ninguna suposición de qué estoy emulando, en cuanto arregle una cosilla del Z80, ajuste el +2A y haga el +3, igual intento hacerme un emulador de Amstrad CPC... :D
zx81 escribió:Eso sí, te aconsejo que pongas binarios para que la gente se lo pueda bajar y probarlo.
Realmente, en MacOS y en Linux compilarlo es muy sencillo: Basta seguir las instrucciones en el README.md del repo de git. De todos modos, supongo que tampoco está al alcance de todo el mundo. Para Windows suelo tener ejecutables, pero me habéis pillado actualizando compiladores y aún no he tenido tiempo de recompilar las bibliotecas, pero prometo que pondré links a los binarios de Windows.
radastan escribió:Tu idea es bastante parecida, salvo que no tienes en cuenta los retardos que se producen a nivel interno (tiempo de propagación de puerta). Ahí es donde está la madre del cordero.
Sin duda, pero piensa que yo no quería simular circuitos digitales genéricos, sino un Spectrum... :lol: Como se trata de una máquina bastante síncrona, realmente con emular la función lógica me basta, porque los retardos suelen ser menores que el ciclo de reloj. Así que recuerde, lo único que funcione de una forma "menos síncrona" (de acuerdo con el libro de la ULA) es el contador de píxels, que es un "ripple counter", y por tanto los flip-flops de los bits superiores van retrasados con respecto a los inferiores. Pero la idea que planteas es muy, muy tentadora. ¿Te imaginas un emulador que pueda hacer el artefacto que salía en el borde de un atributo con "flash"? :) :) :)

De momento estoy muy contenta, porque he conseguido (sobre todo en los modelos de Sinclair) que el comportamiento, en lugar de estar "programado", "emerja" de la lógica. :)

Gracias por vuestros comentarios y consejos. ¡Seguiremos informando! :)

Un saludo :)

hikoki
Freddy Hardest
Mensajes: 657
Registrado: Sab Nov 23, 2013 8:27 am

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por hikoki » Mar Mar 27, 2018 3:06 am

Hola TheMartian. Espero probar el emulador pronto.
Una idea para el interfaz de usuario podria ser algo como Launchy o Albert. Quizás poner ejecutables, uno por función, en la carpeta del emulador e integrar Launchy con el emulador para que salgan solo resultados de lo que hay en la carpeta.

TheMartian
rst 0
Mensajes: 25
Registrado: Dom Mar 25, 2018 2:07 pm

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por TheMartian » Mié Abr 04, 2018 11:06 pm

Hey :)

Pues he aquí un binario de la última versión, compilado para Windows (32-bit):

https://drive.google.com/file/d/1C5zRcY ... sp=sharing

El Avast suele decir que no se fía del ejecutable, así que, por si las moscas, lo he escaneado con VirusTotal.

A ver si os gusta.

PD. Para Linux y MacOS no pongo binarios, porque es bastante sencillo compilarlos siguiendo las instrucciones paso a paso del GitHub.

hikoki
Freddy Hardest
Mensajes: 657
Registrado: Sab Nov 23, 2013 8:27 am

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por hikoki » Jue Abr 05, 2018 5:39 pm

Esa pantalla completa es una gozada :)
He cargado Baby Monkey Alba con el modelo plus2. Va muy lento. Probado con win7 64bits/dual core intel a 1.8GHz/8Gb ram

TheMartian
rst 0
Mensajes: 25
Registrado: Dom Mar 25, 2018 2:07 pm

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por TheMartian » Dom Abr 08, 2018 8:18 pm

hikoki escribió:Esa pantalla completa es una gozada :)
Gracias :) Era uno de mis objetivos, que el emulador arrancase en pantalla completa y se adaptase a la resolución del escritorio. Vaya, que fuese como un Spectrum cuando lo enciendes, que simplemente saca imagen por pantalla.
hikoki escribió:He cargado Baby Monkey Alba con el modelo plus2. Va muy lento. Probado con win7 64bits/dual core intel a 1.8GHz/8Gb ram
No me extraña. Lo que decía más arriba, "el emulador que más recursos consume de la historia". La CPU está emulada por ciclos de reloj, así que el código de la máquina de estados y la selección de la instrucción se ejecuta tantas veces como ciclos tenga la instrucción. Esto es absolutamente rineficiente, claro está, pero mi objetivo era intentar hacer una CPU tan genérica y parecida a la realidad como me fuera posible. Sobre todo, no quería tener que llevar cuenta de ciclos ("tengo este ciclo de lectura que tarda 3 t-estados, pero la ULA está en el estado 14542 y eso son X t-estados más...") porque quiero aprovechar esta implementación del Z80 para hacer más cosas (un emulador de Amstrad CPC, por ejemplo). Sin embargo, eso no quiere decir que no quiera mejorar el rendimiento; simplemente tengo que pensar un poco cómo hacerlo.

Como referencia, yo estoy ejecutándolo principalmente en un Intel Core 2 Duo E8500 a 3,16GHz, y si miro la ocupación de CPU me sale en torno al 50%, así que imagínate todo lo que puedo optimizar... XD

En fin, iré haciendo, que esto está aún muy en pañales... :)

Gracias por el feedback. :)

Avatar de Usuario
chernandezba
Sabreman
Mensajes: 408
Registrado: Mié Oct 17, 2007 5:26 pm

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por chernandezba » Mar Abr 10, 2018 11:03 pm

Bienvenida Marta y felicidades por este nuevo emulador y su nuevo enfoque
Me suena ya haber hablado contigo en WOS
Por cierto lo del avast parece que es común... alguien me comentó que con ZEsarUX, le detectaba el ejecutable como sospechoso... En fin, si cuando me quejo de Windows es con razón... ;)
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

TheMartian
rst 0
Mensajes: 25
Registrado: Dom Mar 25, 2018 2:07 pm

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por TheMartian » Sab Abr 14, 2018 6:40 pm

Gracias :)
chernandezba escribió:Me suena ya haber hablado contigo en WOS
Hemos hablado, de hecho. Me comentaste un detalle de la inicialización del registro I. :) Te menciono por ello en los agradecimientos de mi emulador. :)

La verdad es que me ayudó bastante ese hilo de WoS, entre el tema del registro I, lo del Generalized Data Block del formato .tzx, y lo del bus flotante del +2A (que no es un bus flotante, sospecho, sino un registro del Gate Array mal hecho, porque coincide con el registro del puerto Centronics... y además tiene un retardo de un ciclo de reloj con respecto al dato leído de memoria de vídeo, si no me equivoco...) :?
chernandezba escribió:Por cierto lo del avast parece que es común... alguien me comentó que con ZEsarUX, le detectaba el ejecutable como sospechoso... En fin, si cuando me quejo de Windows es con razón... ;)
Por lo que he visto, el Avast es superrestrictivo con los ficheros .exe que no tiene en su base de datos. Por defecto, te lo pone en cuarentena. En las opciones puedes decir que al menos te pregunte antes, pero imagino que la configuración por defecto es mejor para el público general... :evil: :twisted: :evil:

En este momento me encuentro empezando a desarrollar el FDC y la disquetera del +3. Ya tengo una primera implementación (es-que-le-to) del formato .dsk y la interfaz con la CPU del FDC. Ahora me falta la chicha: El funcionamiento conjunto del disquette, la disquetera y el FDC.

Un saludo :)

Avatar de Usuario
chernandezba
Sabreman
Mensajes: 408
Registrado: Mié Oct 17, 2007 5:26 pm

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por chernandezba » Dom Abr 15, 2018 12:03 pm

Oh gracias por mencionarme :)
Lo del +2A y el bus flotante es raruno, es un comportamiento que descubrí yo hace años pero como habrás visto no es exactamente igual a otros modelos. Pero piensa que si que retorna valores de atributos de pantalla (no recuerdo si de pixeles) por lo que no es solo tema de impresora. Tengo un vídeo donde lo muestro, lo puedes probar fácilmente con un programa en Basic
En cuanto a la disquetera... suerte... yo me he peleado mucho con eso y no hago una emulación para nada exacta del floppy, es más bien un invento intermedio entre hardware de floppy y traps a la rom. Funciona pero no siempre ;)
En cuanto al antivirus... bueno yo no uso Windows por lo que no me afecta. Lo que si que garantizo es que el emulador no lleva virus
Saludos
César
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

TheMartian
rst 0
Mensajes: 25
Registrado: Dom Mar 25, 2018 2:07 pm

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por TheMartian » Lun Abr 16, 2018 12:14 am

chernandezba escribió:Oh gracias por mencionarme :)
No hay de qué, al César lo que es del César... XDDD
chernandezba escribió: Lo del +2A y el bus flotante es raruno, es un comportamiento que descubrí yo hace años pero como habrás visto no es exactamente igual a otros modelos. Pero piensa que si que retorna valores de atributos de pantalla (no recuerdo si de pixeles) por lo que no es solo tema de impresora. Tengo un vídeo donde lo muestro, lo puedes probar fácilmente con un programa en Basic
Sí, sí, sin duda retorna información de vídeo. De hecho, lo tengo implementado en SpecIde (creo que de forma bastante fiel, ya que los programas de test de aquel hilo de WoS funcionan correctamente). Lo que quería decir es que, en teoría, ese puerto aparece documentado como Centronics. Otra cosa son los efectos raros que puedan ocurrir en caso de no tener una impresora conectada, o qué sé yo... No he podido investigar más, y tampoco tengo tanto con lo que investigar...
chernandezba escribió: En cuanto a la disquetera... suerte... yo me he peleado mucho con eso y no hago una emulación para nada exacta del floppy, es más bien un invento intermedio entre hardware de floppy y traps a la rom. Funciona pero no siempre ;)
A ver si tengo suerte. Tengo la clase del FDC765, la del formato DSK y estoy haciendo la disquetera, como una especie de interfaz entre ambos. Lo malo es que hay muchos bits, y no sé cuánto afectarán tiempos de espera y tal, aunque desde el punto de vista del FDC debería ser simplemente recoger bytes y entregar bytes, ¿no? Iré probando, y publicando progresos.

Además, estos días he estado arreglando un poco el PSG, que sonaba un poco raro en las demos que usan la envolvente para la línea de bajo. Ahora creo que suena algo mejor...

Saludos :)

TheMartian
rst 0
Mensajes: 25
Registrado: Dom Mar 25, 2018 2:07 pm

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por TheMartian » Lun Abr 23, 2018 9:03 pm

hikoki escribió:Probado con win7 64bits/dual core intel a 1.8GHz/8Gb ram
hikoki, por mis pruebas he visto que con un Intel Core2 Duo a 2,2 va bien, aunque consume un 75% de CPU.

En algún momento haré un emulador "normal" en vez de hacer un clon del Spectrum por software... XDDDDD

hikoki
Freddy Hardest
Mensajes: 657
Registrado: Sab Nov 23, 2013 8:27 am

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por hikoki » Lun Abr 23, 2018 10:27 pm

TheMartian escribió:hikoki, por mis pruebas he visto que con un Intel Core2 Duo a 2,2 va bien, aunque consume un 75%
Entiendo que "con va bien" quieres decir que la emulación deberia ir fluida?
He tomado dos capturas de video en modo ventana y pantalla completa. Tanto video como sonido no van a una velocidad de 100%. Puede ser un problema con mi máquina? En la barra de título muestra 0%

https://www.youtube.com/watch?v=10IWUBfueAI

https://www.youtube.com/watch?v=pvJXRaJU9kg

TheMartian
rst 0
Mensajes: 25
Registrado: Dom Mar 25, 2018 2:07 pm

Re: Nuevo emulador en desarrollo: SpecIde.

Mensaje por TheMartian » Mar Abr 24, 2018 6:51 pm

hikoki escribió:
TheMartian escribió:hikoki, por mis pruebas he visto que con un Intel Core2 Duo a 2,2 va bien, aunque consume un 75%
Entiendo que "con va bien" quieres decir que la emulación deberia ir fluida?
Exacto. Es a lo que me refiero, que un Core2 Duo a 1,8GHz no es suficiente. Con un Core2 Duo algo más rápido, a 2,2GHz sí va a velocidad real. Igual puedo implementar algún tipo de frameskip, pero no sé si funcionará. En cualquier caso, es lo que pretendía: ver qué pasa si intento emular el Spectrum ejecutando todos los ciclos de reloj.

Piensa que quiero hacer un emulador que funcione en una Raspberry Pi, así que necesito hacer otro intento de emulación, esta vez tratando ciclos de máquina (o incluso instrucciones) como eventos atómicos (como hacen todos los demás emuladores, vaya).

En cualquier caso, te agradezco un montón tus pruebas. Me sirven para ver qué nivel de CPU necesito para mover mi "engendro" de emulador... :)
hikoki escribió:He tomado dos capturas de video en modo ventana y pantalla completa. Tanto video como sonido no van a una velocidad de 100%. Puede ser un problema con mi máquina? En la barra de título muestra 0%
Los vídeos están bien. En mis máquinas (un Core2 Duo a 2,2GHz, un i5 a 3 y pico GHz, y un i7 también por encima de los 3GHz) va fluído.

Lo del 0% es el porcentaje de "avance" de la cinta que está cargada. Si pones un .tzx y lo vas cargando sin la opción "--flashtap" (tendrás que pulsar F11 para hacer Play/Stop en la cinta) irá avanzando poco a poco, y cuando llega al 100% es que has llegado al final de la cinta.

:)

Por cierto, juegazo el Baby Monkey Alba, con una música magnífica. :)

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados