Emulador de Pacman o los milagros también existen

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

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

Emulador de Pacman o los milagros también existen

Mensaje por zx81 » Mié Nov 09, 2011 2:37 pm

Buenas,

El señor Simon Owen ha creado un emulador de Pacman "a-la-MAME" para el Spectrum +2a/+3. Como es un emulador de la máquina necesita, lógicamente, las ROMS originales del arcade para funcionar. Como son ROMS propietarias no las ha incluido con el programa, pero sí ha dejado preparada su maravilla para nos creemos un TAP que incluya las ROMs de Midway (pacman.6e pacman.6f pacman.6h pacman.6j) justo al resto de su programa, listo para ser cargado en el ordenador.

Cómo se las ha apañado para emular una máquina que llevaba un Z80 a 3 Mhz y un chip de sonido que no es el AY entra dentro de la magia, incluso para mi que debería de imaginar qué ha hecho el amigo para conseguir semejante milagro.

Que no se me olvide: http://simonowen.com/spectrum/pacemuzx/

Salud!
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
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Emulador de Pacman o los milagros también existen

Mensaje por na_th_an » Mié Nov 09, 2011 3:33 pm

Lo ha conseguido porque no es un emulador. Solo se simula el hardware de display y hace una conversión de notas para tocar con el AY. El código ejecutable de la ROM se ejecuta tal cual en el Z80 del spectrum, sin emulación.

Básicamente usa el modo de mapeo "all ram" (páginas 0123) del +2A/+3, ya que la ROM de este juego está ensamblada para ejecutarse a partir de $0000 y escribe sus datos a partir de $4000, por lo que necesita una RAM no de pantalla (que son la 5 y la 7) mapeada en $4000. El hardware original empleaba I/O mapeada en memoria, por lo que para leer los controles o tocar música escribía en una zona concreta del mapa de memoria. Lo mismo para los gráficos, basados en un tilemap y con 8 sprites.

Lo que hace es dejar que se ejecute el programa libremente. Como el programa todo lo hace en el espacio de direcciones, cada interrupción se ejecuta su código, que se encarga de leer la memoria gráfica y dibujar los sprites por software (emulando en cierto modo el hardware original), leer el teclado y escribir los valores en las posiciones correctas de memoria donde los espera el programa principal, y traducir los valores de sonido que escribe la ROM original en notas de la AY.

Su programa se ejecuta siempre en la página 2, lo cual es ideal: mientras se está ejecutando el código de la ROM de Pacman, la configuración de ram es 0123. Al ejecutarse el ISR, se cambia al modo de paginación normal, que conserva RAM2 en el mismo sitio y tiene acceso directo a las dos páginas del display y a los 23Kb de gráficos pre-rotados necesarios. Hace todo lo que tiene que hacer, vuelve a paginar 0123 y devuelve el control a la ROM.

Es una verdadera virguería, todo sea dicho.

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

Re: Emulador de Pacman o los milagros también existen

Mensaje por mcleod_ideafix » Mié Nov 09, 2011 3:34 pm

zx81 escribió:Cómo se las ha apañado para emular una máquina que llevaba un Z80 a 3 Mhz y un chip de sonido que no es el AY entra dentro de la magia, incluso para mi que debería de imaginar qué ha hecho el amigo para conseguir semejante milagro.


Muy sencillo: no ha emulado, ha virtualizado hardware (lo mismo que hace VMWare).
El juego funciona sólamente en un +2A/+3 por la sencilla razón de que es el único Spectrum que permite un modo all-RAM (cuidado con los poseedores de un DivIDE cuando arranquen este juego!!). De esa forma, puede ubicar las ROM's del PacMan en los mismos lugares que en la máquina original. Esto es, en los primeros 16K.

A partir de la dirección 4000h en el PacMan está la memoria de pantalla, que es radicalmente diferente a la del Spectrum, así que lo segundo que ha hecho Simon es usar la shadow screen, para que la ULA "pinte" lo que hay a partir de la posición C000h. Esto permite usar la memoria en 4000h para otros fines.

El PacMan tiene una memoria de pantalla orientada a caracteres y luego tiene una pequeña memoria para guardar datos de sprites. Aquí intuyo que el núcleo del programa de Simon lo que hace es ignorar esa definición de sprites y usar otros propios, escalados para que quepan en la pantalla del Spectrum, más reducida. Lo mismo con los caracteres que forman el fondo de la pantalla.

El nicleo también tendrá una rutina de interrupción: esta rutina chequea cada 20ms si algo en la memoria de pantalla del PacMan ha cambiado, y si es así, renderiza esos cambios en la pantalla shadow, que es la que ve el usuario. No se nota cuando estás jugando, porque mientras juegas lo único que cambia en la pantalla son los "cocos" que van desapareciendo a medida que se los come el comecocos. El propio comecocos y los fantasmitas son sprites que "flotan" (nunca mejor dicho) encima de la pantalla. Sí se nota cuando se pinta el laberinto, que llega a verse como se hace como "en dos tiempos", y esto es porque es el único momento en que se hace un cambio masivo del contenido de la pantalla, y a la rutina de interrupción no le da tiempo a actualizarla a la misma vez.

El control de los sprites se hace en el PacMan original escribiendo los nuevos valores de X,Y en ciertas posiciones de memoria. La rutina de interrupción chequea también esas posiciones de memoria y actualiza el sprite correspondiente, que pinta en la propia rutina de interrupción de acuerdo a los nuevos valores.

El sonido es en la máquina original un circuito custom que puede producir varios sonidos diferentes. Se gobierna escribiendo valores en otras posiciones de memoria. Para virtualizarlo se hace igual que con los sprites.

El resto de dispositivos de E/S (joystick, pulsador de coin y pulsadores 1up y 2up) se virtualizan de la misma forma, al ser posiciones de memoria que basta actualizar con los valores adecuados cuando desde la rutina de interrupción se lee "de verdad" una tecla.

Intuyo que el nucleo de arranque parchea alguna cosilla en las ROM's, siendo una de ellas seguramente la rutina de interrupción, de forma que se desvíe a una rutina propia de Simon Owen, y ésta devuelva el control de forma transparente a la rutina original.

Bueno, pues esta es mi teoría :)
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Emulador de Pacman o los milagros también existen

Mensaje por na_th_an » Mié Nov 09, 2011 3:38 pm

Según Simon, emplea un trap "simple" en 0038h y no modifica nada más.

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

Re: Emulador de Pacman o los milagros también existen

Mensaje por mcleod_ideafix » Mié Nov 09, 2011 3:52 pm

na_th_an escribió:Según Simon, emplea un trap "simple" en 0038h y no modifica nada más.


Sí. Lo acabo de leer. No andaba entonces yo muy desencaminado. Supongo que cualquier otro juego que esté basado en Z80, que use E/S mapeada en memoria, y que tenga un manejo de pantalla basado en tiles/sprites (nada de scroll ni cosas así), puede ser virtualizado de la misma forma. Por cierto... ¿has visto cómo queda la versión de Sam Coupé? :D
Web: ZX Projects | Twitter: @zxprojects

jzx
Freddy Hardest
Mensajes: 992
Registrado: Lun Feb 08, 2010 8:19 pm

Re: Emulador de Pacman o los milagros también existen

Mensaje por jzx » Mié Nov 09, 2011 3:53 pm

Yendo para atrás en la web de este hombre tiene también un emulador de vic 20, ya avisa que es muy lento, pero ahí sí que tiene que emular el micro, un 6502

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Emulador de Pacman o los milagros también existen

Mensaje por na_th_an » Mié Nov 09, 2011 4:13 pm

La versión de Sam Coupé es realmente genial :-D

Otra cosa clave, según Simon, es que el tilemap no cambie demasiado de frame a frame, porque actualizarlo no le daría tiempo en una interrupción.

Ahora mismo sería interesante probarlo con otras ROMs de juegos que usasen el mismo hardware. Saldrán con los gráficos incorrectos, por supuesto, porque esta es la parte que se ha escrito ad-hoc, pero seguro que funcionan :-D

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

Re: Emulador de Pacman o los milagros también existen

Mensaje por mcleod_ideafix » Mié Nov 09, 2011 4:15 pm

na_th_an escribió:sería interesante probarlo con otras ROMs de juegos que usasen el mismo hardware.


Yo lo he intentado con un par de juegos que se supone que usan el mismo hardware que el PacMan, pero las ROM's son de diferente tamaño (más de 16K), así que no ha colado :(

Igual merece la pena hacer lo propio con el Galaxian...
http://www.vectorlist.org/TechTools/2002/11/0052.html

Además, parece ser que hay versiones de algunos juegos que usan este mismo hardware (siendo el PacMan uno de ellos :D)
Última edición por mcleod_ideafix el Mié Nov 09, 2011 4:24 pm, editado 1 vez en total.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Emulador de Pacman o los milagros también existen

Mensaje por na_th_an » Mié Nov 09, 2011 4:21 pm

Acabo de leer que egwf ha probado con "Hangly Man" y, según dice, "works great". A ver si luego tengo rato... Aunque no es más que un hack de pacman, o sea, básicamente es el pacman http://en.wikipedia.org/wiki/Hangly-Man

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

Re: Emulador de Pacman o los milagros también existen

Mensaje por mcleod_ideafix » Mié Nov 09, 2011 4:31 pm

na_th_an escribió:Acabo de leer que egwf ha probado con "Hangly Man" y, según dice, "works great". A ver si luego tengo rato... Aunque no es más que un hack de pacman, o sea, básicamente es el pacman http://en.wikipedia.org/wiki/Hangly-Man


Yo acabo de probarlo con el New Puck-X y también funciona. Aquí el laberinto es un pelín diferente al del PacMan original.
Web: ZX Projects | Twitter: @zxprojects

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

Re: Emulador de Pacman o los milagros también existen

Mensaje por radastan » Mié Nov 09, 2011 6:52 pm

Este hombre ya me dejó anonadado con la versión Sam Coupé alos atrás, pero esta de Spectrum es la repera.
Va fina-fina, con sus soniditos y todo, una pena que no tenga color por poco que sea.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

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

Re: Emulador de Pacman o los milagros también existen

Mensaje por mcleod_ideafix » Mié Nov 09, 2011 7:22 pm

Me pregunto si se podría hacer esto en el MSX... tiene un chip gráfico que funciona por tiles como el Pacman, sprites hardware con lo que remeda mejor el movimiento (¡y los colores!), y el mismo chip de sonido que el Spectrum 128K. Lo que no sé es si permite mapear RAM en el espacio de ROM. Si así fuera, entonces quedaría una versión practicamente idéntica a la del Spectrum, salvo porque además podría tener color.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
Metalbrain
Freddy Hardest
Mensajes: 588
Registrado: Lun May 07, 2007 8:17 am
Ubicación: Sevilla
Contactar:

Re: Emulador de Pacman o los milagros también existen

Mensaje por Metalbrain » Mié Nov 09, 2011 7:42 pm

mcleod_ideafix escribió:Me pregunto si se podría hacer esto en el MSX... tiene un chip gráfico que funciona por tiles como el Pacman, sprites hardware con lo que remeda mejor el movimiento (¡y los colores!), y el mismo chip de sonido que el Spectrum 128K. Lo que no sé es si permite mapear RAM en el espacio de ROM. Si así fuera, entonces quedaría una versión practicamente idéntica a la del Spectrum, salvo porque además podría tener color.


Yo creo que si el modelo tiene al menos 64K debe hacerlo sin problema. Y además hace poco lo preguntaron en el foro de msx.org y lo confirmaron:
http://www.msx.org/forumtopic13639.html
SevenuP se escribe con u minúscula y P mayúscula.

Avatar de Usuario
oblo
Sabreman
Mensajes: 327
Registrado: Lun Feb 07, 2011 9:53 am

Re: Emulador de Pacman o los milagros también existen

Mensaje por oblo » Mié Nov 09, 2011 8:31 pm

Increíble, esto me deja sin palabras :shock: :shock:
Ahora bien, ¿esto podría llevarse a la práctica con otros juegos de la época que usaran la misma placa o tuviesen unas características similares?

salu2

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

Re: Emulador de Pacman o los milagros también existen

Mensaje por radastan » Mié Nov 09, 2011 11:11 pm

oblo escribió:Increíble, esto me deja sin palabras :shock: :shock:
Ahora bien, ¿esto podría llevarse a la práctica con otros juegos de la época que usaran la misma placa o tuviesen unas características similares?

salu2


Ojito, en este emulador s ehace uso de un "truco", que consiste en usar todos los colores como blanco. Es decir, si pusiéramos otro juego habría que ver como quedarían los gráficos, porque puede que llegue a ser horrible. En Sam Coupé el autor del emulador suplantó la parte de imagen para poder tener sprites decentes, pero en Spectrum no se ha podido llegar a tanto (por eso los fantasmas son tan raros).
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 1 invitado