Ayuda con Bennu en MemoryCard de PS2

Started by folken, September 06, 2017, 12:41:08 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

folken

Hola estoy pasando el CowBoy Bebop de la versión en Dreamcast al port PS2 de Bennu, estoy cambiando el modo de guardar el nivel actual, en la versión de Dreamcast usaba un modesto sistema de passwords de 3 digitos, ahora en la versión para PS2 estoy usando las funciones para guardar en una MemoryCard de PS2.

El archivo .XPS se almacena de forma correcta junto con los datos en una memory de 8 MB, al leerlo puedo recuperar sin problemas los datos del ultimo nivel y puntuación del jugador.

Mi problema es que en el juego de COWBOY-BEBOP el archivo es correcto, tanto para escritura como para lectura, pero si se explora la MemoryCard desde la bios de la PlayStation2, el icono del archivo dice "Datos Corruptos".

Intenté crear la estructura de un XPS en Bennu, pero aun la bios de la PS2 muestra el icono como datos corruptos.

Esta es la estructura del XPS que estoy usando:



    /*
         |==========================================|
         |SUMMARY: folken 09/05/2017 19:00 hrs.     |
         |==========================================|
         |Basic structure to storing files          |
         |in memory format in Sony PlayStation 2,   |
         |compatible with TC58V64AFT chips.         |
         ============================================
    */
   
    struct MEMORYCARD
        /******* XPS HEADER ************/
        byte m_version[4]    = (0,0,1,20);
        byte m_shark[17]     = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
        byte m_sysL1[4]      = (0,0,0,10);
        char m_name[10]      = "COWBOY.XPS";
        byte m_sysL2[3]      = (0,0,3);
        byte m_sysda[3]      = (5,9,17);
        byte m_reserved1[4]  = (0,0,0,0);
        byte m_checksum[4]   = (0,0,0,0);       
        /******* FILE DESCRIPTOR *******/       
        byte m_sizedesc[2]   = (0,250);
        byte m_titlegam[64]  = "Nova32 Cowboy Bebop, the game.                                  ";
        byte m_lensdir[4]    = (0,0,0,0);
        byte m_statsec[4]    = (0,0,0,0);
        byte m_edstsec[4]    = (0,0,0,0);
        byte m_attrfile[4]   = (1,1,1,1);
        byte m_makedate[8]   = (0,0,0,0,0,5,8,17);
        byte m_modydate[8]   = (0,0,0,0,0,5,8,17);
        byte m_reserved2[4]  = (0,0,0,0);
        byte m_padding[12]   = (0,0,0,0,0,0,0,0,0,0,0,0);
        byte m_titlefil[64]  = "Nova32 Cowboy Bebop, the game.                                  ";
        byte m_titlejis[64]  = "Nova32 Cowboy Bebop, the game.                                  ";
        byte m_reserved3[8]  = (0,0,0,0,0,0,0,0);
        /******* XPS DATE-FORMAT *******/   
        byte m_reserved4     = 0;
        byte m_second        = 1;
        byte m_minute        = 43;
        byte m_hour          = 17;
        byte m_day           = 5;
        byte m_month         = 9;
        byte m_year[6]       = 2017;
        /******* ATTRIBUTE-FLAGS *******/   
        byte m_read          = 1;
        byte m_write[2]      = (1,1);
        byte m_exec[4]       = (0,0,0,0);
        byte m_copyhold[8]   = (0,0,0,0,0,0,0,0);
        byte m_filenull[10]  = (1,2,3,4,5,6,7,8,9,10);
        byte m_subdir[20]    = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);       
        /******* PS2 DATA **************/       
        int m_score;
        int m_level;   
    end





Leer y escribir el fichero de la MC, funciona bien, utilizo estas funciones:



if(PLAY2_MC_LOAD("COWBOY.XPS", MEMORYCARD, sizeof(MEMORYCARD)))       
        id_LEVEL_STATUS         = MEMORYCARD.m_level;
        id_SUPER_RECORD_Counter = MEMORYCARD.m_score;       
        Starting_Level(); 
    else
        //Código para el ERROR ON READ SONY MEMORYCARD
    end

if(PLAY2_MC_SAVE("COWBOY.XPS",MEMORYCARD,sizeof(MEMORYCARD)))
     //Código para el OK
else
    //Código para manejar el ERROR
end



Sin embargo la bios de la PS2 sigue sin poder entender mi archivo XPS como la siguiente pantalla:





Si alguien puede ayudarme lo agradecería mucho  :'( :'( :'(

La prueba la estoy realizando con el siguiente hardware:

-PlayStation Slim modelo 77001
-Datecode 7B
-bios USA/NTSC
-Modchip Matrix Infinity v1.93
-MemoryCard de 8MB (chip clon de TC58V64AFT )

También hice la prueba usando el emulador PCSX2:

-Port BennuPS2
-PCSX2 v1.4.0
-bios USA

Pero también muestra datos corruptos al hacer browse a la MC desde el emulador :(







 
Where reality ends, life begins!

l1nk3rn3l

Por el momento no tenemos tiempo para mirar el problema pero lo
agregamos a la lista...

dices que funciona ok en el juego, toca esperar a que se revise el problema en el proximo
beta de ps2..  en el momento estamos mejorando el de DC..

folken

#2
Hola L1nk, gracias por agregarlo a la lista de pendientes, como bien lo comentas las funciones del Port para escribir y leer en la MC de la PS2 funcionan de maravilla.  ;D

Es posible guardar la puntuación y cualquier dato de un juego corriendo en el Port BennuPS2, yo lo he probado tanto en emulador como en una consola física y los resultados son excelentes.

Sería genial si más a futuro tuvieramos la estructura correcta de un archivo XPS, para que la bios de la consola la pudiera leer, y evitar el mensaje de datos corruptos.

Así cuando un jugador explore su MemoryCard desde la PS2, pueda ver el detalle del archivo( Nombre del juego, nivel, puntos, etc.), por lo que he mirado está dificil ponerle icono, pero al menos los datos basicos y evitar el mensaje ese de datos corruptos.

Se me ocurre de dos formas, bien creando el archivo XPS desde el mismo Bennu, como la estructura XPS que propuse en este post, o bien que la función del mismo Port la construyera al momento de crear el archivo en la "mc0://", por ejemplo:



/* Función en Bennu: */

PLAY2_MC_SAVE("ARCHIVO.XPS",datos,sizeof(datos),"titulo del juego",version,nivel,puntuacion);


/* Agregar estructura XPS directamente a la función del Port escrita por Masteries antes de llamar al fioWrite()  */


int CreateSaveMC(char *filename, void *data, int len)
{
      int mc_fd;
      char cad[30];

    strcpy(cad, "mc0:");
    strcat(cad, filename);

    // Write  to the memory card (Note that this filename is fixed)
    mc_fd = fioOpen(cad, O_WRONLY | O_CREAT);
    if(mc_fd < 0) {
      printf("MEMORY CARD written ERROR .\n");
      return 0;
    }

    fioWrite(mc_fd, data, len);
    fioClose(mc_fd);

    printf("MEMORY CARD written sucessfully.\n");
    return 1;
}






Podria ser una buena mejora, es algo estetica solamente, para el momento en que los jugadores exploren su MemoryCard desde la bios del PS2.

Gracias por responder L1nk, cuando gustes que haga alguna prueba que necesites, puedes decirme y lo hago con gusto. tengo para pruebas el emulador PCSX2 instalado y consola (Tengo una slim 77001 y un familiar me regaló una 55011 slim hace un par de días cuando le conté de hacer juegos con bennu).



Saludos!!!  :)

Where reality ends, life begins!