WPC son las iniciales de "Williams
Pinball Controller", el sistema de control usado por Williams para sus pinballs
desde 1990 hasta 1999. Son casi 50 modelos los fabricados con este
sistema, incluyendo títulos tan conocidos como The Addams Family, Indiana Jones,
Twilight Zone, Medieval Madness, etc.
Las memorias ROM son los chips donde se almacena el programa principal y los
datos necesarios para el funcionamiento del pinball como gráficos, efectos o
músicas. Realmente sería más adecuado hablar de EPROMS, que a
diferencia de una ROM, se pueden borrar con luz ultravioleta y volver a
grabar. Esta es una gran ventaja ya que permite actualizaciones, la
pega es que pueden llegar a borrarse con el tiempo.
Tal vez en alguna ocasión te habrás sentido tentado a modificar el contenido de
las ROMs de tus pinballs, quizás para modificar el tedioso mensaje "Say no to
drugs", para cambiar alguna pésima traducción o simplemente para
personalizar tu pinball.
Para hacer estos cambios basta con un editor hexadecimal, una programadora de
EPROMs y algo de tiempo y paciencia, ahora bien nos encontraremos con un gran
obstáculo que se llama "checksum".
El "checksum" es el algoritmo que usa el WPC para chequear la integridad del
contenido de las ROMs. Es un número de 4 cifras hexadecimales que se calcula a
partir del contenido de la ROM.
Dentro de los auto chequeos que hace el WPC cuando arranca está el test del
checksum; si falla este test el pinball no arrancará (el sistema lo interpreta
como memoria corrompida).
Por tanto, si modificamos el contenido de una ROM tenemos que modificar también
el checksum o el pinball no arrancará.
A la hora de cambiar el checksum hay una pequeña dificultad, calcularlo es
sencillo porque es un algoritmo estándar y hay muchos programas que lo hacen, el
problema es que al poner un nuevo checksum, el checksum vuelve a cambiar (porque
modificamos una posición de memoria) y ya no vale el que hemos puesto (es el pez
que se muerde la cola).
Afortunadamente hay un truco que salva el problema...
Instrucciones para modificar Imágenes ROM WPC:
1) Carga la imagen ROM en un editor hexadecimal.
2) Realiza las modificaciones que quieras hacer en la imagen ROM.
3) Pon el checksum original a cero, son dos posiciones de memoria localizadas en
0x7FFEE & 0x7FFEF.
4) Calcula el nuevo checksum (usa el programa de Bill Ung, localizado
en
http://www.ufopinball.com/Bill/).
5) Escribe el nuevo checksum en las direcciones 0x7FFEE & 0x7FFEF.
6) Calcula la siguiente resta: (0xFFFF - checksum), es decir restar el nuevo
checksum al número hexadecimal 0xFFFF (los editores hexadecimales suelen tener
calculadora hexadecimal, también vale la calculadora de Windows en su versión
científica)
7) Localiza dos bytes consecutivos en la memoria que estén a 0xFF (con un poco
de suerte serán de una zona no utilizada)
8) En la posición que hayas encontrado, escribe el resultado calculado en el
paso 6
¡este es el truco, escribimos el complementario de checksum en alguna zona de memoria
no usada!
9) Salva la imagen y vuelve a calcular el checksum, debería coincidir con el
obtenido anteriormente en el paso 4.
Para fijar ideas un caso práctico, por ejemplo, si quieres cambiar una ROM 9.2
de la Twilight Zone para que diga "SAY YO TO DRUGS"
Estos serían los pasos:
1) Carga la imagen ROM en un editor hexadecimal.
2) Busca la palabra "DRUGS"
3) Localiza el "NO" anterior.
4) Cambia la 'N' por una 'Y' (en TZ 9.2 está en la dirección 0x3A90B.)
5) Ahora vete al final de la imagen a la dirección 0x7FFEE donde deberías ver el
checksum original que vale 0x9392.
6) Escribe 0x0000 como nuevo checksum.
7) Salva la imagen
8) Calcula el nuevo checksum, a mi me sale 0x9278.
9) Carga la imagen de nuevo en el editor hexadecimal y vuelve a la posición del
checksum.
10) Escribe el nuevo checksum.
11) Localiza alguna zona sin usar dentro de la imagen de la ROM que contenga
0xFFFF. Yo usé las direcciones 0x7FF8E y 0x7FF8F.
12) Resta 0xFFFF menos el nuevo checksum, sale 0x6D87 (0xFFFF - 0x9278 = 0x6D87).
13) Escribe este resultado en la localización del paso 11, en este caso, 0x7FF8E
y 0x7FF8F.
14) Salva la imagen y recalcula el checksum. Debe coincidir, en caso contrario
algo estás haciendo mal.
---
Grant Schenck
schenck@compuserve.com