Fin de desarrollo de jBacteria (emulador javascript)

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

Moderador: Sir Cilve Sinclair

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

Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por antoniovillena » Sab Jun 25, 2011 2:14 am

http://jbacteria.retrolandia.net/

Acabo de añadirle sonido AY que era lo último que me faltaba, por lo que doy por finalizado el desarrollo. Aunque sea un emulador javascript funciona perfectamente offline con archivos locales, arrastrando y soltando ficheros .TAP, .SNA o .Z80 a la pantalla del emulador.

El sonido html5 está disponible vía Audio Data Api en Firefox 4+ y vía Web Audio Api en Chrome dev-channel (debéis activarlo en about:flags).

Cada máquina tiene 2 versiones distintas: una normal y otra optimizada para ordenadores lentos. La diferencia es que la optimizada acaba con la letra "s" (por ejemplo 48s). Podéis emportarlo en cualquier web usando iframe (ver ejemplo) o mostrarlo en una ventana independiente, en este caso os dejo 4 ejemplos:

http://jbacteria.retrolandia.net/128?chasehq.tap
http://jbacteria.retrolandia.net/128?robocop.tap
http://jbacteria.retrolandia.net/128?targetre.tap
http://jbacteria.retrolandia.net/128?batmant1.tap

Edito: Recomiendo siempre que sea posible elegir la opción Joystick Kempston en los juegos y manejarse con los cursores y la tecla Tab. Si no está activado pulsar antes F2.
Última edición por antoniovillena el Dom Oct 19, 2014 1:25 pm, editado 1 vez en total.
Imagen

Avatar de Usuario
marce
Herbert
Mensajes: 79
Registrado: Lun Jun 11, 2007 8:05 pm
Ubicación: Mallorca
Contactar:

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por marce » Dom Abr 15, 2012 11:31 am

Hola Antonio!

Tu trabajo con los emuladores me parece increíble. ¿Puedo instalarme jBacteria en mi servidor?

Quiero ejecutar un par de tonterías que estamos haciendo para el 30 aniversario del Spectrum (http://www.retromallorca.com/30-aniversario-spectrum) y la verdad es que no entiendo como funciona. He copiado los ficheros (http://emuscriptoria.svn.sourceforge.net/viewvc/emuscriptoria/) en un directorio de mi servidor (http://www.retromallorca.com/emuscriptoria/) y Chrome me lanza un mensaje en la consola Javascript de que no encuentra algunas URLs, por ejemplo:

Al lanzar por ejemplo la URL:
http://www.retromallorca.com/emuscriptoria/d+2A.html

No encuentra: http://www.retromallorca.com/emuscriptoria/_+2A
Failed to load resource: the server responded with a status of 404 (Not Found)

Falta algo, supongo que en el fichero .htaccess ¿Me podrías ayudar, por favor? (si te parece lo comentamos en speccy.org y así todo el mundo se puede enriquecer con la experiencia)

Saludos,
Marce


Hola Marcelino

Pues sí, me parece mejor comentarlo en speccy.org. Abre un hilo y yo te responderé por ahí.

A bote pronto no puedo ver en qué falla porque me salta un error:
"You don't have permission to access /emuscriptoria/ on this server."

Decirte que no soporta ficheros TZX, en javascript son muy lentos de procesar. Implementé los ficheros CDT (idénticos a TZX para CPC) y se quedaba mucho tiempo pillado y sin responder, así que le quité el soporte.

Por último también hay otra opción de que yo suba el archivo a mi servidor. Se puede mostrar un juego con un iframe apuntando a mi web dando la impresión de estar alojado en el tuyo.

Saludos


Muchas gracias! Por una parte alojarlo en tu servidor nos sería mucho más fácil, pero a costa de gastar yo tus recursos... lo que prefieras. ¿Cómo cargaría un fichero mío?

Saludos,
Marce

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

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por antoniovillena » Dom Abr 15, 2012 1:25 pm

marce escribió:Muchas gracias! Por una parte alojarlo en tu servidor nos sería mucho más fácil, pero a costa de gastar yo tus recursos... lo que prefieras. ¿Cómo cargaría un fichero mío?

Saludos,
Marce


Si es sólo un fichero me lo envías por email y yo lo subo a mi servidor. Así es todo más fácil. Además si el emulador está incrustado en un iframe el usuario ni se dará cuenta de que está en otro servidor. Usar el iframe es tan fácil como meter el siguiente código html en tu web:

Código: Seleccionar todo

<iframe src='http://jbacteria.retrolandia.net/48s?manicmin.tap#' width='400' height='300'></iframe>

La almohadilla fuerza que se vea el marcador con el porcentaje de cpu. Aquí tienes un ejemplo: http://antoniovillena.es/2011/05/roland-cpc-javascript

Ahora bien, voy a explicar los pasos para instalarte el jbacteria tanto en local como en otro servidor. La licencia es GPL, puedes instalarlo en cualquier servidor siempre que no sea para fines comerciales, y modificar el código fuente, siempre que se respete la autoría y se publique también con licencia GPL.

Hay 2 versiones distintas, la de desarrollo y la de producción. Lo más sencillo de instalar es la versión de producción, ya que son 2 archivos por emulador (en total hay 18 emuladores, 9 máquinas cada una a 2 velocidades). No es necesario que instales los 18 emuladores, con instalar estos 4 es suficiente: 48, 48s, 128 y 128s. Son el spectrum 48K y el 128K original. Casi todos los juegos funcionan en estas plataformas, salvo excepciones (por ejemplo el pacemu que sólo funciona en +2A/+3).

Seguimos explicando la versión de producción. De los dos archivos por emulador hay uno que es el grande (*.rom.deflate) que contiene prácticamente toda la implementación y que es cacheado por el navegador, y hay otro muy pequeño (*.html.deflate) que sólo actúa como lanzador, es el encargado de cargar el juego y el emulador, y al tener una URL distinta para cada juego no es cacheado por el navegador. En resumen, cuando cargas la siguiente url: http://jbacteria.retrolandia.net/48s?manicmin.tap lo primero que se obtiene es el lanzador, el archivo 48s.html.deflate. Este archivo cargará mediante ajax tanto el juego http://jbacteria.retrolandia.net/games/manicmin.tap como el emulador http://jbacteria.retrolandia.net/_48s.rom.deflate.

La única diferencia entre las versiones que acaban en "s" y las que no (por ejemplo entre 48s y 48) es la rutina que se encarga de dibujar el canvas en cada frame. La que termina en "s" reutiliza el canvas del anterior frame, siendo más rápida en ordenadores lentos. La que no acaba en "s" pinta un frame nuevo cada vez, es más lenta en teoría, pero en ordenadores con escalado hardware no se nota la diferencia. En cualquier caso obtiene un frame rate más estable, puesto que gráficamente cada frame tiene que dibujar el mismo número de pixels. Algunos juegos van mejor en 48 y otros en 48s, no hay una norma general. Eso sí los juegos sin scroll tipo manic miner siempre van mejor en 48s.

Ahora bien, estos archivos compilados no se encuentran en el repositorio, se generan ejecutando el archivo compila.bat. Lo malo es que se necesita el runtime de PHP y el de JAVA (porque se usa yui para comprimir el código fuente javascript). Así que he creado este archivo http://antoniovillena.es/imagenes_foros/compilados.zip con los compilados ya listos para subir al servidor. Contiene también el .htaccess necesario.

Ahora voy a explicar el .htaccess. Lo único necesario es un mecanismo que evite las extensiones, que es el Option Multiviews. Este mecanismo traduce la url "http://loquesea.com/48" en "http://loquesea.com/48.html.deflate" en el servidor. Si tu servidor no te permite el Multiviews hay otra alternativa mediante rewrites:

Código: Seleccionar todo

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.deflate -f
RewriteRule .+ %{REQUEST_FILENAME}.deflate [L]


Si bien este mecanismo sólo te evita el .deflate del nombre. En este caso habría que indicar la url mediante "http://loquesea.com/48.html". En caso de cargar un juego sería "http://loquesea.com/48.html?juego.tap"

Por último, están los juegos. Se deben subir a una carpeta llamada games/ (con respecto a la ubicación del lanzador) y pueden estar comprimidos (manicmin.tap.deflate) o sin comprimir (manicmin.tap).

Todo esto es lo necesario para instalar el emulador en un servidor. Si quieres desarrollar tan sólo tienes que trabajar con los archivos .html y .js que también están en el repositorio. Por ejemplo d48.html obtiene la rom del compilado _48.rom.deflate, pero el resto del código los carga de archivos *.js, no del compilado. Estos archivos son: spectrum.js, specs1.js y z80.php?m=1 (el motor z80 genera un archivo javascript mediante php usando parámetros, hay distintas versiones: cpc, spectrum, con emulación memptr).

Esto sería la instalación estática. Si necesitas soporte para partidas grabadas necesitas crear una base de datos mysql con dos tablas: spectrum_games y spectrum_record, subir los archivo rec.php y partidas.php del repositorio y crear una carpeta recorded/ con permisos de escritura. Por ejemplo aquí tengo un ejemplo de partida grabada: http://jbacteria.retrolandia.net/48s?Tn3m4g.rec
Imagen

Avatar de Usuario
marce
Herbert
Mensajes: 79
Registrado: Lun Jun 11, 2007 8:05 pm
Ubicación: Mallorca
Contactar:

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por marce » Mar Abr 17, 2012 8:38 pm

Muchísimas gracias! Va de coña.

Una cosa: No emula DSKs, verdad? Aun así, cuando le pongo un tap en modo +3 me suelta: Error: Invalid dsk file. Cuando le meto un DSK me dice k Invalid note name, 0:1 o_O

Los timings no están emulados 100%, no? No muestra bien las imágenes con efectos de color de alta resolución de Colorator http://mesxes.es/colorator.php. (te mando por mail unos ejemplos...)

Pero vamos, que es un trabajo buenísimo.

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

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por antoniovillena » Mar Abr 17, 2012 10:10 pm

marce escribió:Muchísimas gracias! Va de coña.

Una cosa: No emula DSKs, verdad? Aun así, cuando le pongo un tap en modo +3 me suelta: Error: Invalid dsk file. Cuando le meto un DSK me dice k Invalid note name, 0:1 o_O

Los timings no están emulados 100%, no? No muestra bien las imágenes con efectos de color de alta resolución de Colorator http://mesxes.es/colorator.php. (te mando por mail unos ejemplos...)

Pero vamos, que es un trabajo buenísimo.


Hola marce

Sí emula DSK, aunque la emulación DSK no es perfecta y fallará en juegos protegidos. En realidad la emulación del controlador de disco la tomé prestada del otro emulador, Roland, que emula amstrad cpc, y no la he probado mucho en el +3 porque la mayoría de los juegos cargan por TAP. De todas formas pásame el archivo que te da error por email y le echo un vistazo.

En cuanto a los timings, la memoria contenida no está emulada, eso sí los ciclos del Z80 se emulan bien. Sería como un inves spectrum. Si te interesa hay un emulador por ahí también en javascript (qaop/js) que emula perfectamente la memoria contenida. Tendrías que preguntarle al autor porque la licencia no es GPL. Mi principal objetivo era hacer un emulador fluído y jugable, dejando la fidelidad en segundo plano. Es por esto que la pantalla se pinta de una sola vez (no está emulado el raster), no está emulada la contención de memoria, y el border está fuera del canvas (es un background css).

Y gracias, siempre es un placer ver gente interesada en mi proyecto.
Imagen

Avatar de Usuario
marce
Herbert
Mensajes: 79
Registrado: Lun Jun 11, 2007 8:05 pm
Ubicación: Mallorca
Contactar:

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por marce » Dom Abr 29, 2012 11:20 pm

Ya hemos publicado algunas cosillas con el emulador: http://www.retromallorca.com/es/30-aniversario-spectrum/#emulador

Te mandé un DSK de prueba, a ver si lo hacemos funcionar.

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

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por antoniovillena » Lun Abr 30, 2012 12:33 am

Gracias por la publicidad del emu. Sí, he leído el correo del DSK, perdón por no haberte contestado aún. Es que hace tiempo que no le meto mano al emulador y tengo que buscar un hueco. Este tipo de depuraciones requieren paciencia. Mi emulador no tiene debugger, así que básicamente lo que hago es generar un snapshot cada X ciclos y cargarlo en un emulador que funcione. Es una búsqueda binaria, si el snapshot funciona, busco hacia atrás; si no funciona, busco hacia adelante. Así hasta encontrar la instrucción exacta que hace que el juego falle.
Imagen

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

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por hikoki » Jue Oct 16, 2014 2:54 am

No me resisto a preguntar si seria posible convertir jbacteria en una aplicacion android utilizando una de esas tecnologias que aceleran javascript por hardware como Cocoonjs o html5apkbuilder.
Tambien seria interesante mejorar los controles tactiles de este tipo de emuladores por ejemplo siguiendo ideas como las que Goody y yo mismo comentamos en este hilo :
viewtopic.php?f=11&t=3815&p=41511#p41511
para ello podrian ser utiles librerias javascript como estas
http://draggabilly.desandro.com/
http://mobiforge.mobi/design-developmen ... uch-events
Última edición por hikoki el Jue May 21, 2015 10:14 am, editado 1 vez en total.

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

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por antoniovillena » Jue Oct 16, 2014 3:06 am

Sí, es posible. Incluso correría bien sin aceleradores. Estuve a punto de darle soporte táctil pero me quedé a medias. Lo que sí que no voy a hacer es usar ninguna librería, lo que añada lo implementaré desde cero.

El problema es que es un emulador poco conocido, hay otros emuladores javascript incluso algunos mejores como el qaop. Prefiero dedicar tiempo a otros proyectos que sé que van a tener más repercusión. Aunque el código fuente está disponible, cualquiera puede modificarlo y añadirle lo que quiera.
Imagen

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

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por hikoki » Sab Oct 18, 2014 12:41 pm

Hombre, muchos se quejan de los controles de los emuladores, no se como son los de zxds pero en tabletas podria tener su impacto un emulador con este aspecto muy cuidado. A ver si alguien se anima. :)

Otro proyecto que podria hacerte mas famoso, visto el tiron de la speccyjam, seria desarrollar un gamemaker basado en javascript y boriel zxbasic con todas las herramientas integradas para los elementos del juego ordenados con botones/ventanas. La idea seria crear una libreria javascript para que el usuario programara sobre ella a modo de pseudolenguaje facilmente traducible internamente por el ide a zxbasic, quizas bastaria con expresiones regulares y no haria falta una de esas herramientas para crear tu propio lenguaje de programacion como:
http://irony.codeplex.com
http://www.codeproject.com/Articles/250 ... t-Compiler
De esta forma se podria desarrollar a la vez el mismo juego para web y spectrum, diseñadores web se animarian a hacer juegos para el spectrum..
Se podria tomar como base un gamemaker de codigo abierto que es poco mas que un editor de javascript ligero pero con editor de mapas sencillo y un diseño efectivo de ventanas, tululoo.

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

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por antoniovillena » Sab Oct 18, 2014 2:12 pm

Ya hice algo parecido con el FASE, que también funcionaba en javascript, y no ha tenido mucha repercusión.
Imagen

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

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por hikoki » Sab Oct 18, 2014 5:24 pm

Ja muy bueno! Lo acabo de encontrar en mojonia:
http://www.mojontwins.com/mojoniaplus/v ... ipt#p56701
Esa era mi sugerencia pero con un programa y con un lenguaje que te permita hacer un juego con gravedad, friccion, particulas, movimientos, colisiones..la libreria estaria hecha para que al traducir a zxbasic todo funcionara muy parecido tanto en javascript como en spectrum. Un ejemplo de framework para hacer juegos rapidos seria mgl.coffee de abagames, si todo eso se gestionara con un programa con ventanas, editor de mapas, importador de graficos, editor de graficos compatible con los frameworks soportados por zxbasic.. me parece que tendria una buena repercusion presentandolo en la speccyjam, supongo que mucha gente de fuera de la escena se animaria a utilizarlo con el incentivo de tener una version retro de su juego javascript. Ya se que puede sonar demasiado bonito y que se necesitaria mucho esfuerzo para desarrollar esta herramienta.

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

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por antoniovillena » Sab Oct 18, 2014 10:12 pm

El engine FASE es sólo para los sprites, los tiles, los mapas, las pantallas y las músicas. Todo lo demás te lo tienes que currar tú. En la demo tienes como implementar colisiones y gravedad, pero algo sencillo e ilustrativo que sirve como ejemplo.

Si quieres algo más masticado tienes la Churrera donde puedes incluso no tocar ni una línea de código. Pero claro, ahí está el dilema, si te lo dan todo hecho todos los juegos salen muy parecidos entre sí.
Imagen

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por mcleod_ideafix » Sab Oct 18, 2014 11:26 pm

Oye, ¿le ha pasado algo a tu web? Me dice el navegador que no la encuentra...
Web: ZX Projects | Twitter: @zxprojects

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

Re: Fin de desarrollo de jBacteria (emulador javascript)

Mensaje por antoniovillena » Sab Oct 18, 2014 11:51 pm

mcleod_ideafix escribió:Oye, ¿le ha pasado algo a tu web? Me dice el navegador que no la encuentra...


No. ¿Cuál es la URL que no te funciona?
Imagen

Responder

¿Quién está conectado?

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