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.