Nuevo emulador de Spectrum y tutoriales - YASS

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

Moderador: Sir Cilve Sinclair

Responder
FMarcos
rst 0
Mensajes: 6
Registrado: Mar Sep 11, 2012 10:56 am

Nuevo emulador de Spectrum y tutoriales - YASS

Mensaje por FMarcos » Mié Sep 12, 2012 6:14 pm

Saludos a todos - soy nuevo por aquí y aprovecho para presentarme.

Me llamo Fernando, y soy programador desde los años 80. Aunque mi trabajo habitual nada tiene que ver con éste mundo, siempre tengo inquietudes por aprender más cosas, y este verano lo he dedicado a aprender cómo era el Sinclair ZX Spectrum "por dentro". Yo era (ejem) "del otro bando" (aunque no me guste nada como suena la frase), de los Commodore 64, VIC 20 y Amiga y fui redactor de las revistas Commodore World y Amiga World de la época.

La verdad es que me ha encantado este tiempo de aprendizaje y me he permitido desarrollar un emulador más o menos completo de un Sinclair ZX Spectrum (YASS - "Yet Another Spectrum Simulator"), con la diferencia de que he publicado el proceso completo paso a paso en mi blog (http://efepuntomarcos.wordpress.com/2012/08/27/hazte-un-spectrum-1-parte/), empezando estríctamente desde cero, y considero que quizá os interese como material adicional para esta fantástica web. La verdad es que os he encontrado un poco tarde, porque todo el material que he ido obteniendo ha salido de WorldOfSpectrum. Pero más vale tarde que nunca.

El "tutorial" consiste en 8 capítulos y comienza desde el diseño básico de la emulación de buses y cpu, la implementación de instrucciones, montar la primera máquina básica para probar el procesador y echarla a andar... para terminar describiendo el funcionamiento del chip ULA, del audio, etc, todo ello acompañado con el código fuente correspondiente, paso a paso. En las entradas encontraréis enlaces tanto al emulador ya compilado como al código fuente completo.

Webmaster (Sir Clive) me ha propuesto hospedar tanto el tutorial como el emulador en esta web y si asi lo consideráis oportuno estaré encantado de "traerme" todo el contenido. Y, por supuesto, quedo a vuestra absoluta disposición para todo lo que me queráis comentar del proyecto - yo soy "el nuevo", tanto en éste foro como en el mundo del Spectrum.

Saludos y gracias a todos!

jzx
Nonamed
Mensajes: 1047
Registrado: Lun Feb 08, 2010 8:19 pm

Re: Nuevo emulador de Spectrum y tutoriales - YASS

Mensaje por jzx » Mié Sep 12, 2012 7:58 pm

Pues bienvenido. Ya iré leyendo lo del emulador, a ver si me entero de algo (es que de C++ sé poco más que que existe). Pero parece interesante (he leido ya un poco,)

FMarcos
rst 0
Mensajes: 6
Registrado: Mar Sep 11, 2012 10:56 am

Re: Nuevo emulador de Spectrum y tutoriales - YASS

Mensaje por FMarcos » Mié Sep 12, 2012 9:07 pm

jzx escribió:Pues bienvenido. Ya iré leyendo lo del emulador, a ver si me entero de algo (es que de C++ sé poco más que que existe). Pero parece interesante (he leido ya un poco,)


Muchísimas gracias! Y espero que le saques provecho - simplemente que me digas que lo encuentras medianamente interesante, para mi ya es todo un logro!!

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

Re: Nuevo emulador de Spectrum y tutoriales - YASS

Mensaje por radastan » Mié Sep 12, 2012 9:26 pm

Aquí otro interesado, me viene de perlas para ampliar mi herramienta de desarrollo.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
climacus
Sabreman
Mensajes: 411
Registrado: Mar Ago 25, 2009 1:46 pm

Re: Nuevo emulador de Spectrum y tutoriales - YASS

Mensaje por climacus » Mié Sep 12, 2012 9:37 pm

Muchas gracias. Como sea la mitad de interesante de lo que me imagino, memeotoo
Todos mis juegos en formato físico
http://www.matranet.net/boutique/zx/zx.php

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Nuevo emulador de Spectrum y tutoriales - YASS

Mensaje por antoniovillena » Mié Sep 12, 2012 10:17 pm

Bienvenido y enhorabuena por el emulador. Tiene muy buena pinta, me ha encantado el borde de la TV con esquinas redondeadas, le da mucho realismo. ¿Le has pasado algunos de estos test?

http://wizard.ae.krakow.pl/~jb/qaop/tests.html

Me lo he intentado instalar pero me dice que me falta la v4.0.30319 del .NET Framework, así que lo probaré en otro ordenador que tiene Windows 8 (o me bajo las librerías).
Imagen

FMarcos
rst 0
Mensajes: 6
Registrado: Mar Sep 11, 2012 10:56 am

Re: Nuevo emulador de Spectrum y tutoriales - YASS

Mensaje por FMarcos » Mié Sep 12, 2012 10:51 pm

Gracias a todos... a ver, que me he amontonao...

radastan escribió:Aquí otro interesado, me viene de perlas para ampliar mi herramienta de desarrollo.



Pues a tu disposición para lo que necesites!

climacus escribió:Muchas gracias. Como sea la mitad de interesante de lo que me imagino, memeotoo



Gracias a tí!!

antoniovillena escribió:Bienvenido y enhorabuena por el emulador. Tiene muy buena pinta, me ha encantado el borde de la TV con esquinas redondeadas, le da mucho realismo. ¿Le has pasado algunos de estos test?

http://wizard.ae.krakow.pl/~jb/qaop/tests.html

Me lo he intentado instalar pero me dice que me falta la v4.0.30319 del .NET Framework, así que lo probaré en otro ordenador que tiene Windows 8 (o me bajo las librerías).


Gracias por lo de la pantalla - fué una "inspiración" de ultimísima hora para aprovechar la aceleración gráfica de WPF para hacer el efecto "grátis" (la CPU del PC ni se entera...).

De esos tests que me sugieres, casi te aseguro de antemano que no va a pasar ni uno. La emulación (por el momento) no tiene en cuenta la contención de los 16KB de RAM que gestiona la ULA. Y si lo que me parece ver es lecturas "al aire cuando la ULA está refrescando la pantalla", tampoco (quizá no es eso).

Date cuenta que hace un mes (casi justo), no tenía ni idea de cómo funcionaba un Spectrum por dentro, pero me apetecía muchísimo aprendérmelo y de ahí salió el emulador. Muchísimas cosas se han quedado en el tintero (los flags "no documentados" X e Y, la contención de RAM, simular la lectura del bus "al aire" mientras la ULA refresca la pantalla)... Si me metía con eso, no me daba tiempo a acabarlo en las vacaciones. Pero sí, tengo ese "gusanillo" de que "faltan cosas". Lo que me gustaría es poder implementarlo y que quedase "fácil de explicar" o "de entender".

Para que te hagas a la idea, el audio no me salía (tironeaba), iba a darme por vencido y (atención) no implementarlo - me estaba quedando sin tiempo! Se me encendió la bombilla un día y lo terminé en tres horas...

Y finalmente y para no hacerme más pesao ya, si tienes XP p'arriba y usas .NET 3.5, monta sin escalas .NET 4.0 ("Client Profile" sobra). Hace lo mismo que pueda hacer 3.5, solo que bastante más deprisa y usando menos memoria... La idea de hacerlo con .NET "por arriba" era porque hay un concepto muy de moda ultimamente, que "todo hay que hacerlo en C#". Y hay cosas que no. Para el tema de la presentación visual (por ejemplo), .NET es simplemente perfecto. Para el emulador, donde esté el código nativo, que se quite lo demás. Y quería (tambien!) aprovechar el tutorial para mostrar cómo unir C++ y c# en el mismo proyecto. Un usuario avanzado puede empezar con el fuente C++. Un usuario menos experto puede tomar "Spectrum.dll" y plantarla dentro de su programa C# o VB y a correr!!

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Nuevo emulador de Spectrum y tutoriales - YASS

Mensaje por antoniovillena » Mié Sep 12, 2012 11:13 pm

Tienes razón, al emular la contención el código se hace más difícil de leer. Puedes dejarlo así, sino dejaría de ser un emulador didáctico. La CPU sí que las puedes emular mejor sin perder legibilidad. El Z80 es muy puñetero y hay muchas instrucciones que es difícil emularlas bien: DAA, INIR, OUTIR, flags 5 y 3, incluso hay un registro (MEMPTR) oculto que es costoso de emular en tiempo de procesador. De momento puedes pasarle el Z80Tests

http://homepage.ntlworld.com/mark.woodmass/z80tests.tap

Si tienes alguna duda sobre cómo emular alguna instrucción puedo echarte una mano. Yo lo hice con mi emulador y gané compatibilidad (muchos juegos que antes fallaban empezaron a funcionar):

http://jbacteria.retrolandia.net/48?z80tests.tap
Imagen

FMarcos
rst 0
Mensajes: 6
Registrado: Mar Sep 11, 2012 10:56 am

Re: Nuevo emulador de Spectrum y tutoriales - YASS

Mensaje por FMarcos » Jue Sep 13, 2012 8:38 am

antoniovillena escribió:...El Z80 es muy puñetero y hay muchas instrucciones que es difícil emularlas bien: DAA, INIR, OUTIR, flags 5 y 3, incluso hay un registro (MEMPTR) oculto que es costoso de emular en tiempo de procesador. De momento puedes pasarle el Z80Tests...


Mil gracias Antonio!! Si, ya he visto las "gracietas" que tiene el Z80 (y eso que ya has visto hasta qué nivel he "bajado", que todavía me queda un mundo). Has dado exáctamente en el clavo: quería hacer un emulador, pero tenía que ser "didáctico" (como bien dices), asi que no podía meterme con ciertas interioridades. Y luego estaba el tema de que era un proyecto para vacaciones, así que tampoco andaba sobrado de tiempo... Y muchas más gracias por los tests que me pasas: será lo primero que pruebe en casa en cuanto llegue!!

Pregunta abierta: si tuviéseis que elegir entre emular la contención de cpu por la ULA o los flags X/Y (3/5) de la cpu... por dónde empezarías?

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Nuevo emulador de Spectrum y tutoriales - YASS

Mensaje por antoniovillena » Jue Sep 13, 2012 11:36 am

FMarcos escribió:
Mil gracias Antonio!! Si, ya he visto las "gracietas" que tiene el Z80 (y eso que ya has visto hasta qué nivel he "bajado", que todavía me queda un mundo). Has dado exáctamente en el clavo: quería hacer un emulador, pero tenía que ser "didáctico" (como bien dices), asi que no podía meterme con ciertas interioridades. Y luego estaba el tema de que era un proyecto para vacaciones, así que tampoco andaba sobrado de tiempo... Y muchas más gracias por los tests que me pasas: será lo primero que pruebe en casa en cuanto llegue!!

Pregunta abierta: si tuviéseis que elegir entre emular la contención de cpu por la ULA o los flags X/Y (3/5) de la cpu... por dónde empezarías?


Sin duda los flags 3/5. Son fáciles de emular, tienen el mismo tratamiento que el bit 7 (bit de signo) y algunos juegos no funcionan bien si no está emulado. El típico ejemplo es el rinoceronte de Sabre Wulf que anda para atrás.

La contención es un tema más complicado; tendrías que probar varias opciones de implementación y elegir la más didáctica.
Imagen

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

Re: Nuevo emulador de Spectrum y tutoriales - YASS

Mensaje por zx81 » Jue Sep 13, 2012 1:39 pm

Enhorabuena por el emulador, no había visto este hilo aún y por eso te había felicitado en los comentarios del blog.

Por lo que leo en el hilo, tendrás que decidir si es más importante un emulador "didáctico" o uno "preciso", porque sospecho que lograr ambas cosas es tremendamente complicado. No basta simplemente con emular las cosas, hay que emularlas en el orden correcto y en el momento preciso.

Decirte que si lo que te apetecía era currarte un core Z80 en C++, perfecto. Pero se puede hacer uno en C# y de hecho ya hay al menos un emulador escrito en ese lenguaje (Zero creo recordar que se llama). Ten en cuenta que la velocidad no es un problema porque cualquier ordenador moderno es millones de veces más potente que un Spectrum. Mi emulador está escrito en Java al 100% y en ordenadores modestos aún es capaz de ejecutar los programas 4 o 5 veces más rápido que el original. Estando escrito en C++, podrías emular sin problemas los bits 3 y 5 y hasta el MEMPTR, que tampoco cuesta tanto. Emular la contención de la ULA es un poco más complicado y, además, afecta al core Z80. Y para algunos juegos, ni con eso basta. Prueba con el Arkanoid, una vez que hayas implementado la contención y el bus flotante (antes de eso ni funciona), y entenderás a qué me refiero. :)

Ten cuidado con estos juguetes, que uno empieza y no se sabe donde parar.... ;)
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

FMarcos
rst 0
Mensajes: 6
Registrado: Mar Sep 11, 2012 10:56 am

Re: Nuevo emulador de Spectrum y tutoriales - YASS

Mensaje por FMarcos » Jue Sep 13, 2012 5:11 pm

antoniovillena escribió:Sin duda los flags 3/5. Son fáciles de emular, tienen el mismo tratamiento que el bit 7 (bit de signo) y algunos juegos no funcionan bien si no está emulado. El típico ejemplo es el rinoceronte de Sabre Wulf que anda para atrás.
La contención es un tema más complicado; tendrías que probar varias opciones de implementación y elegir la más didáctica.


Pues me acabas de dar una respuesta perfecta. Si, había leído lo de esa característica tan simpática de Sabre Wulf - impresionante, oye. De hecho, voy a ver si arranca el juego en mi emulador "pelao"... a ver cuantas cosas fallan!!

zx81 escribió:Por lo que leo en el hilo, tendrás que decidir si es más importante un emulador "didáctico" o uno "preciso", porque sospecho que lograr ambas cosas es tremendamente complicado.


Exácto! Y como bien decís, emular la contención no es simplemente "añadir ciclos al contador y ya está", que sería facilito y didáctico... Pero tocaría desmontar cada instrucción e ir insertando los retardos en cada fase, lo cual haría un código francamente difícil de leer - y de mantener.

Desde el principio quise hacer un "tutorial", ser didáctico y, sobre todo, que el código final fuese muy modular y fácil de seguir. Y ya puestos, un tutorial que pudiese correr bastantes juegos (bueno, realmente me importaba sólo uno: JetPac! y corre, corre!).

zx81 escribió:Decirte que si lo que te apetecía era currarte un core Z80 en C++, perfecto. Pero se puede hacer uno en C# y de hecho ya hay al menos un emulador escrito en ese lenguaje (Zero creo recordar que se llama).


Por supuesto!! De hecho, hay implementaciones completas escritas en JavaScript - y que van de la leche por cierto, y son incluso mucho más precisas que mi implementación. Tambien elegí C++ por la portabilidad a casi cualquier cosa (y si os fijáis en el código fuente del "nucleo duro", procuré escribirlo lo más "ANSI" posible).

Que conste que me encanta C# (la sintáxis es preciosa a mi modo de ver), pero mi trabajo cotidiano consiste en programar sistemas embebidos, donde cuenta cada byte de memoria y cada ciclo de procesador, así que en C/C++ me siento extremadamente cómodo (a ratos, incluso más que con C#).

zx81 escribió:Ten en cuenta que la velocidad no es un problema porque cualquier ordenador moderno es millones de veces más potente que un Spectrum. Mi emulador está escrito en Java al 100% y en ordenadores modestos aún es capaz de ejecutar los programas 4 o 5 veces más rápido que el original.


Totalmente de acuerdo, pero hay otro factor: sabes programar. Corrijo: en este foro SE SABE PROGRAMAR. Con mayúsculas. C++, Java, JavaScript... Podría contarte casos de verdadero terror que veo todos los días.

zx81 escribió:Ten cuidado con estos juguetes, que uno empieza y no se sabe donde parar.... ;)


Me estoy dando cuenta, me estoy dando cuenta... Pero es que es la leche de divertido y la compañía MEJOR!!!

Responder

¿Quién está conectado?

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