El formato RZX
Los autores de emuladores de Spectrum al fin se han puesto de
acuerdo en un formato de intercambio de eventos como es el formato
RZX. Veamos sus principales características.
La primera pregunta que nos surge es: ¿qué es el
formato RZX y qué necesidades pretende suplir? RZX viene a
ser un sustituto libre del formato AIR que utiliza Realspectrum, de
forma que sea estándar en todos los emuladores. El objetivo
es disponer de un método común para grabar eventos en
los emuladores, como puedan serlo las pulsaciones de teclado y los
movimientos del joystick, y almacenarlos en ficheros. Estos
ficheros podrán posteriormente ser cargados en el mismo
emulador o en otro (de ahí la importancia de que sean
formatos estandarizados) de forma que se reproduzcan las entradas
almacenadas, tal y como si estuviéramos volviendo a presionar las
mismas teclas o movimientos de joystick en los mismos instantes de
tiempo.
¿El resultado? Algo similar a un vídeo. Se puede
así grabar partidas completas para mostrar a alguien
cómo se termina un juego, la solución, el camino
más corto, la demostración de que hacemos un
determinado número de puntos (y que se pueda ver cómo
lo hacemos), etc. Además, con estos ficheros podemos cortar
la reproducción del RZX en cualquier punto y retomar el
control del programa, es decir, en una determinada fase del juego
podemos tomar de nuevo el mando y continuar nosotros con la
ejecución del mismo. Otra utilidad sería la de
complementar tutoriales acerca de utilidades o programas de
Spectrum, mostrando su uso.
Además los ficheros están realmente optimizados. Si grabar un vídeo
de 6 horas puede ocupar en formato DIVX (como AVI) entre 600MB
y 1.2GB (según la calidad), el fichero .AIR (equivalente al RZX
pero sin la compresión de éste) de una partida de seis horas al
juego Tetris 2 que podéis encontrar en la web de The Espian
ocupa cerca de 500KB. Esto es así porque realmente no se almacena
el sonido y el vídeo como en los ficheros multimedia, sino que se
almacenan las pulsaciones de teclado y joystick a través de las
cuales se reproduce la partida como si fuera un vídeo.
Esto permitirá crear verdaderos repositorios con soluciones
y finales de juegos capaces de ser reproducidos en cualquier
emulador que soporte RZX, en lugar de los repositorios actuales de
ficheros AIR que sólo pueden ser ejecutados en RealSpectrum.
Podemos encontrar algunos de estos repositorios en las siguientes
URLs:
- http://www.thespian.demon.co.uk/air/main.htm Web de partidas grabadas de The Spian, dónde podéis encontrar (entre otras) una partida de 6 horas de Tetris 2 en menos de 600KB, y mi partida completa y finalizada de Target Renegade sin perder una sola vida.
- http://www.jaivan.net/Partidas_grabadas.htm
(pulsando en los iconos del menú superior, podemos elegir
entre Partidas Acabadas, de Competición, Alternativas y de
competiciones anteriores, entre otras)
Esta necesidad surgió principalmente para las competiciones
de juegos de Spectrum: hay que mostrar la partida completa para que
el jurado verifique que no hay trampas de ninguna clase. No es suficiente
con mostrar una captura de pantalla de la puntuación obtenida ni tampoco
un snapshot de memoria con la partida en el instante de obtener la
puntuación, ya que estos valores se podrían haber modificado previamente
de diferentes formas, e incluso se podría haber hecho trampa ralentizando
el emulador (o acelerándolo), grabando y cargando partidas, etc. El
problema es que el formato AIR usado hasta el momento sólo
era usable en ciertos emuladores como RealSpectrum. Este formato no
podía ser usado en otros emuladores ya que era muy
dependiente de las rutinas de temporización de éste
emulador.
Los programadores de varios emuladores de Spectrum, unidos a la
gente de RAMSOFT (autores de RealSpectrum) pusieron en común
un borrador para un nuevo formato de fichero llamado RZX como
sustitución activa a los ficheros AIR. El formato se
comenzó a definir discutiendo de forma activa en el grupo de
news de Spectrum en inglés:
comp.sys.sinclair, y
acabó el hilo con una propuesta en firme de Ramsoft el 2 de
Febrero del 2002.
Este formato se basa en:
- API de uso directamente utilizable por los emuladores, para
facilitar su adaptación.
- Portabilidad (código escrito en C puro).
- Seguridad frente a trampas en competiciones: los datos pueden
ir cifrados de forma simétrica o asimétrica.
Además tiene 2 características que lo hacen muy
atractivo para las competiciones, y es que tiene un sistema para
detectar la presencia de autofires, y un control de la velocidad la
que se ha usado el emulador, para que no sea ni mayor ni menor que
la real del Spectrum.
- Tamaño de ficheros reducidos, comprimiendo diferentes
partes del fichero internamente con Zlib.
Requerimientos básicos
No todos los emuladores pueden utilizar la librería de RZX.
Existen una serie de requerimientos básicos a cumplir:
- Buena emulación de la CPU Z80, especialmente la
emulación de flags. Afortunadamente el formato RZX se ha
diseñado para funcionar independientemente de las temporizaciones de
las instrucciones (que varían según cada emulador,
algo que era el principal problema para extender el formato
AIR).
- Un curioso evento que sucede cuando se habilitan las
interrupciones inmediatamente de que hayan sido llamadas (dentro la
función de gestión de las mismas).
Algunos emuladores actuales ya soportan RZX o lo harán
próximamente: FUSE o Realspectrum (por nombrar los
más representativos para los S.O. mayoritarios) entre ellos.
No obstante, Ramsoft indica en una nota en su página que
ningún emulador debería implementarlo hasta que se
termine de especificar totalmente el formato y se libere la
versión 1.0. Esto es así porque el objetivo de Ramsoft
es evitar que circulen diferentes versiones ficheros RZX que
puedan ser incompatibles con futuras revisiones del formato.
Aún así emuladores como FUSE lo
implementan en la actualidad, en sus versiones de fichero
más modernas.
Para más información sobre el formato RZX, se puede
consultar el borrador más actualizado del mismo en
http://www.ramsoft.bbk.org/rzxform.html.