Rigor y Criterio | podcast

Sobre la protección de la vieja Playstation

Escuché en mis años mozos muchas leyendas sobre cómo la consola detectaba si tu CD era original o era una copia, la más extravagante era que tenía que ser negro o si no, no funcionaría. Todo eran un poco ensoñaciones de nuestra temprana edad.

Sony ciertamente no se salta el estándar ISO para su protección pero sí que modificaban un proceso de la fábricación para hacer sus CDs un tanto especiales. Pero antes de meternos en harina, quisiera que entendiérais un par de conceptos sencillos. Imaginad que un CD es un pequeño vinilo que se lee de dentro hacia afuera (al contrario que ocurre con los vinilos), y en esa zona inicial se guardan ciertos datos de utilidad:

Vinilo

  • Una primera parte que se llama PMA donde guardamos el número de sesiones y situación, seguida de la tabla de contenidos o Lead-In. Con el ejemplo del vinilo pensad en las canciones y su ubicación.

  • A continuación ya se guardan todos los datos de la sesión uno detrás de otro tal y como indicamos en su tabla de contenidos.

Pues bien tras ese Lead-In y durante el inicio de los contenidos es donde Sony genera una ondulación física y específica que la consola puede seguir y detectar si es correcta. Esa ondulacion va cambiando amplitud codificando letras en ASCII, en concreto: SCE(I/E/A) - dependiendo de la región (japón, europa o america respectivamente)-.

Por ejemplo, en un juego americano si pudiéramos decodificar esa información, veríamos durante los primeros segundos estos caracteres: SCEASCEASCEASCEA...

He hecho una pequeña simulación en Audacity de como se verían esos datos de forma visual :D

Codificación de un Juego de PSX Americano

Esos cambios no son nada especial que haya inventado Sony, todos los CDs poseen una ondulación variable, propia de las imperfecciones de la grabación y es el hardware el que se encarga de filtrar esos errores y devolver los datos limpios a la controladora.

Pero esa ondulación inicial nuestras lectoras no están preparadas para detectar, simplemente la ignoran y se dedican a sacar la información (que es lo que ellas necesitan).

La información en un CD normal

Como expliqué en el podcast, los CDs vírgenes que tenéis en casa poseen una información parecida que guarda la velocidad que se puede grabar, minutos/megas disponibles y otros datos que nuestras grabadoras leen cuando insertamos el disco.

Como véis la PSX usa esos defectos para insertar la información que ellos desean que la consola lea, en este caso unas letras. La BIOS de la consola es la que se encarga de que si esta cadena de letras no contiene los caracteres de su región directamente salte a un lugar NULO y el juego no se inicie. Imaginad este sencillo código:

  • guarda en variable R lo que contiene CDINFO (imaginad que esto nos devuelve las letricas)

  • ¿ R contiene "SCEA" ?

  • si incorrecto GOTO NULL

  • continúa lectura ... a jugar!

Pues el parchéo es tan sencillo como cambiar la comprobación de que si es incorrecto, quedando algo así:

  • guarda en variable R lo que contiene CDINFO

  • ¿ R contiene "SCEA" ?

  • no hagas nada

  • continúa lectura ... a jugar!

Si dejamos esta especie de pseudocódigo cutre, realmente ese "no hagas nada" se escribe en código máquina: NOP

La información en un CD normal

Y ya nos da igual si la bios está leyendo SCEASCEASCEA o EVAMARIASEFUE :)

Creo que más o menos con esto queda explicada la protección, la verdad es que Sony ya que tenía la posibilidad de masterizar sus juegos podría haber usado otros métodos para detectar si un CD era original o no. Podéis comentarnos por twitter si se os ocurren otros métodos mejores y qué os parece que os llenemos la cabeza de información totalmente inútil, para siga escribiendo zarandajas de este calado.

Otras referencias: