USB Extreme Linux

Estoy escribiendo una herramienta para volcar juegos de Playstation2 a nuestro disco duro USB sin necesidad de usar Windows. Asi prescindimos del software que acompaña a USB Extreme para instalar los juegos.

La herramienta esta casi finalizada solo tengo un gran problema que no he conseguido solucionar. Tekken 5 se almacena en el disco duro de la forma:

-rwxr-xr-x 1 trapecista users 1073741824 Nov  1 17:10 ul.2C8780C3.SCES_532.02.00
-rwxr-xr-x 1 trapecista users 1073741824 Nov  1 17:11 ul.2C8780C3.SCES_532.02.01
-rwxr-xr-x 1 trapecista users 1073741824 Nov  1 17:12 ul.2C8780C3.SCES_532.02.02
-rwxr-xr-x 1 trapecista users  879460352 Nov  1 17:13 ul.2C8780C3.SCES_532.02.03
-rwxr-xr-x 1 trapecista users         64 Nov  1 17:13 ul.cfg

Necesito informacion del numero que encontramos entre ul y SCES.

ul.2C8780C3.SCES_532.02.00 ====> 2C8780C3

¿Teneis idea de donde sale este numero? Se que es dependiente del titulo del juego, en este caso "Tekken 5".

Inicialmente pense que se trababa de un hash CRC32, pero mis intentos han sido infructuosos.

Otros nombres para juegos dan distintos numeros.

"A" ====> 935FAD90
"B" ====> E2B4F243
"C" ====> 33AD339F
"D" ====> 04624DE5
"E" ====> D67B8C39

Fijaos que es un numero hexadecimal(4bits) de 8 cifras. En total son 4x8 = 32 bits.

¿Teneis alguna idea?
El numero es finalmente un CRC32 del titulo del juego.

Podemos obtenerlo mediante este codigo:

static const unsigned CRC_TABLE_SIZE = 256;
static const int POLYNOM = 0x04C11DB7;

void Crc :: tableInit()
{
    for ( unsigned position = 0; position < CRC_TABLE_SIZE; position++)
    {
        int crc = position << 24;

        for ( unsigned i = 0; i < 8; i++ )
        {
            if (crc < 0)
                crc = ( crc << 1 );
            else
                crc = ( crc << 1 ) ^ POLYNOM;
        }

        crcTable[CRC_TABLE_SIZE - position - 1] = crc;
    }
}

int Crc :: calculate( string name )
{
    int crc = 0;
    for( unsigned i = 0; i <= name.length(); i++ )
        crc = crcTable[name[i] ^ ( ( crc >> 24 ) & 0xFF )] ^ ( ( crc << 8 ) & 0xFFFFFF00 );

    return( crc );
}


Un saludo
Me alegro que lo encontraras, y encima nos posteas el codigo para sacarlo.

Estoy impaciente por ver como te queda el programilla cuando acabes.

Tiens pensado hacerle una pequeña GUI?
Iniciamente pensaba clonar las aplicaciones ya existentes para la instalacion de juegos desde la consola de Windows.

De todas formas estoy escribiendo el codigo en C++ con multitud de objetos, de esta manera crearle una interfaz grafica sera bastante facil.
3 respuestas