Variacion del DVD Check

Ripeando el MAXIMO encontré dos DVD Checks en el SLES de lo mas normal al estilo:

li $a0, 2
jal scecdmmode

Pero este juego tiene mas proteccion en los ficheros mjolnir.irx y mjolnird.irx. Aqui es donde se pone interesante.
Resulta que se llama a la funcion scecdmmode con el valor de una posicion de memoria, es decir:

#000007c0 lw a0, $9118(at) a0=giMediaType
#000007c4 jal $00004b4c sceCdMmode

Y yo digo si usa una posicion de memoria para leer el valor 2 que corresponderia con la instruccion li $a0, 2 antes de poder usar esa variable (giMediaType) han tenido que darle valor en algun sitio del codigo. Y efectivamente en la siguiente porcion de codigo se ve la asignacion:

#000047c0 bne v1, v0, $000047d0
#000047c4 nop
#000047c8 b $000047d4
# 000047cc li $0001 v0=$00000001
#000047d0 li $0002 v0=$00000002
......
#000047dc sw v0, $9118(at) giMediaType

Esto quiere decir que despues de unas cuantas operaciones si se da el caso carga un 1 (CD) en v0 para despues almacenarlo en la variable giMediaType o carga un 2 (DVD).
Bien a nosotros nos interesa que carge siempre un 1 por lo que sustituimos en 2 por un 1 y asi siempre nos cargara un 1 y para la proteccion del scecdmmode.

Pero hay algo mas:

#000007e4 lw v1, $9118(at) v1=giMediaType
#000007e8 li v0, $0002 v0=$00000002
#000007ec bne v1, v0, $00000800

Nosotros hemos guardado un 1 en la variable giMediaType para poder pasar la proteccion scecdmmode pero luego nos hace falta que la comparacion que se hace en 0x7ec sea verdadera por lo que habra que cambiar el 'li v0, 2' por un 'li v0,1'.

Y con esto todo arreglado... En el fichero mjolnird.irx el sistema de proteccion es el mismo.
Una pregunta, de donde sacas el li v0, 2?? De #000007e8??

Eso sí, te habrás pegado una buena currada con este archivoXD (suerte que los irx son pequeñitos)
Si a tu pregunta

Esa porcion de codigo compara el valor de la varible global que contiene el tipo de medio (giMediaType) para comprobar que es un DVD y si lo es carga del CD el stream, pero si no se salta esta cada y se cuelga el juego.
Hola:

¿Me podrías decir dónde has conseguido o has aprendido lo que hacen cada pseudoinstrucción del lenguaje de la play2 (mips r5900 creo)?

Es que fostiator dijo que pondría un pequeño tutorial cuando pudiera, pero todavía no lo ha puesto y no quiero darle el cocñazo porque parece que está bastante liado.

GRACIAS.:)
3 respuestas