Emulador del "Pac-Man" original en un ZX Spectrum

El lugar para hablar de los emuladores. || Post here if you have any question about the emulators.

Moderadores: Neville, CEZ

Responder
Avatar de Usuario
NeilParsons
128 bits
128 bits
Mensajes: 1719
Registrado: 23 Oct 2006 13:21
Ubicación: Al borde del estrecho y a un paso de Gibraltar
Contactar:

Emulador del "Pac-Man" original en un ZX Spectrum

Mensaje por NeilParsons »

Todo se resume en lo que he publicado en mi blog al respecto. Pongo aquí lo más interesante:

El ZX Spectrum puede sorprendernos más aún. Lo último que se ha sabido desde Speccy.org es la aparición de un programa muy especial, diseñado por Simon Owen, con el cual es posible emular la ROM del archiconocido “Pac-Man” de Namco/Midway desde un Spectrum, aunque esto es posible solamente en los modelos +2A y +3 de Sinclair Spectrum. No obstante, no hay que llamarlo un emulador como tal sino como un programa que simula a través de software el funcionamiento en hardware de la recreativa.

Na_th_an: "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."

Para que esto funcione, deberíamos contar con la ROM del arcade, constituido por cuatro archivos de 4 KB cada uno:

pacman.6e
pacman.6f
pacman.6h
pacman.6j

Por supuesto, tenemos que ingeniárnosla para tener dicha ROM y descomprimir la carpeta dentro del directorio de la aplicación. Una vez hecho esto, solo tenemos que arrancar el fichero “make.bak” para obtener un .TAP con el programa ya listo para ser usado en un emulador de ZX Spectrum y seleccionado cualquiera de los dos modelos (solamente +2A y +3). No se nos permite emplear otra ROM que no tenga dichos archivos, la del propio “Pac-Man”, aunque también se puede lograr hacerlo con las ROM de algunos de sus clones como “Hangly Man” o “New Puck-X”, con solo renombrar los nombres de archivos que tengan las mismas extensiones .6x (por ejemplo, en el caso de “newpuckx.zip”, se cambiarían los nombres de los archivos “puckman” (solamente tres de los cuatro que posee) por “pacman”, sin cambiar sus extensiones). ¡¡¡Y funcionan!!!

Probarlo... no os arrepentiréis... :D

http://simonowen.com/spectrum/pacemuzx/
They tried to make me go to rehab
but I said, no no no.
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Re: Emulador del "Pac-Man" original en un ZX Spectrum

Mensaje por na_th_an »

Jodó, cuando digo "Solo se simula ... " parece que es moco de pavo. No, señores, no es moco de pavo. La virguería es que la máquina tenía su Z80 ejecutando código TODO EL RATO (excepto en una corta ISR que lo que hace es leer el teclado y actualizar cosas), mientras que el hardware gráfico se encargaba del display y de componer los sprites sobre un fondo de tilemap, sin que el Z80 no tuviese más que decir dónde estaban las cosas. El señor Simon Owen ha hecho la virguería de que, en cada interrupción, todo ese comportamiento hardware se simule por software lo suficientemente rápido para que la velocidad del juego se vean mínimamente alterada.

Es para quitarse el sombrero, vaya.
Avatar de Usuario
Metalbrain
128 bits
128 bits
Mensajes: 1717
Registrado: 16 Oct 2005 15:56
Ubicación: Sevilla
Contactar:

Re: Emulador del "Pac-Man" original en un ZX Spectrum

Mensaje por Metalbrain »

NeilParsons escribió:[...] con solo renombrar los nombres de archivos que tengan las mismas extensiones .6x (por ejemplo, en el caso de “newpuckx.zip”, se cambiarían los nombres de los archivos “puckman” (solamente tres de los cuatro que posee) por “pacman”, sin cambiar sus extensiones). ¡¡¡Y funcionan!!!
Una pequeña puntualización... funciona, pero como deja de coincidir el byte final de paridad al generar el archivo .tap, dará un R Tape Loading error a menos que se le corrija ese detalle (tras dicho error se podrá ejecutar a mano el RANDOMIZE. Según el hilo de WoS, bastaría con hacer un GOTO 90).
SevenuP se escribe con u minúscula y P mayúscula.

I need Speed - Kein Aufruf zu Drogenkonsum.
Responder