Skip to content

Emulador de Pac-Man para ZX Spectrum +2A/+3 de Simon Owen

noviembre 9, 2011

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.

McLeod-Ideafix, un gran conocedor del hardware del ZX Spectrum como de otros sistemas clásicos, explica con mucho detalle cómo funciona este emulador, desde una base estrictamente teórica:

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.

Y Na_th_an, de los Mojon Twins, parte de esta premisa:

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.

Según esto, sería posible usar ROMS de otros arcades cuya placa de hardware sea la misma del arcade de Midway, aunque no se garantiza que funcionen correctamente según la cantidad de memoria total de los archivos de estas ROMS y cómo estén posicionadas. Sin embargo, el programa de Simon Owen requiere de los cuatro archivos que relaciono a continuación del video para hacer posible esta emulación en un ZX Spectrum.

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. 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 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!!!

Para saber sobre este emulador: Pac-Man Emulator site

Fuente: Speccy.org

También se está discutiendo sobre este programa “emulador” en el foro de World Of Spectrum. Todo un descubrimiento y es posible que esto marque un nuevo punto de inflexión, aunque también signifique entrar en derroteros poco claros, que no hace falta ni clarificar pues se entiende sobremanera de qué se trata, y siempre hay que tener en cuenta para qué sirve realmente la emulación.

Sin embargo, solo existen unas pocas ROM de recreativas que se nos permite bajar desde Internet, más concretamente desde la propia web de MAME, sin temor alguno ya que han sido liberadas por sus respectivos autores, pero habrá que ver si con esas ROMs en concreto se podría conseguir algo similar; no con este mismo programa, pero parecido.

About these ads
5 comentarios leave one →
  1. noviembre 10, 2011 11:00 am

    Alucinante :O

    * Que bueno es el jugador del video!

  2. curioso1100 permalink
    noviembre 10, 2011 5:38 pm

    Pues ahora mismo -no estoy en casa- no logro ponerlo en pie, pero recuerdo que no hace demasiado tiempo salió algo muy parecido para Amstrad CPC. En esa ocasión se trataba de un “emulador” del frogger -la ranita que cruza la carretera- que también funcionaba haciendo algún “truco” con la ROM original y “reprogramando” la pantalla y demás cosas del CPC. Desde luego quedaba francamente bien -en tema de colores y sonido- sin embargo, no recuerdo que aprovechando ese trabajo se haya “emulado” ninguna otra recreativa en el CPC.

    x josepzin: efectivamente, juega francamente bien :-)

  3. noviembre 13, 2011 10:17 pm

    Alucinantemente bien! yo hubiera muerto 187 veces! :D :D

  4. noviembre 14, 2011 2:08 am

    Lo bueno de hacer este tipo de simulaciones es experimentar después con otras ROMs de recreativas. Quizás para más adelante tengamos algo parecido para poder jugar al Mr. Do o al Frogger. Todo se andará. :D

Trackbacks

  1. » That´s incredible!

SPAMMERS ARE NOT ALLOWED!!!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 47 seguidores

%d personas les gusta esto: