[DS] ¿Dónde anda la librería FAT de SaTa con soporte escritura para SC SD?

Pues eso, que llevo ya un rato bueno buscando alguna librería FAT con soporte de lectura/escritura pa la SuperCard SD... ¡pero es que no hay manera de encontrar nada! X-D

Ya había oido que la original de chishm solo soporta lectura en la SC SD, pero es que tampoco ha habío forma, como digo, de encontrar la de SaTa que esta sí que implementa la escritura...

¿Alguien sabe donde se puede descargar así como donde encontrar documentación sobre el uso de sus funciones?

Gracias.
aqui la tienes, para usarla has de editar el Makefile haciendo esto:

por alla la linea 26 hay una que comienza con esto:

SOURCES := lo que sea

le has de añadir la carpeta donde tengas las librerias fat. ejemplo:

antes:
SOURCES := gfx source data
despues:
SOURCES := gfx source data source/fat

luego en tu codigo, añades:

#include "fat/gba_nds_fat.h"
#include "fat/disc_io.h"

ale, ya esta implementado [plas]


para usarlas es facil, aqui un ejemplo rapido ^^

char buffer[500];

if (FAT_InitFiles()==false){//si no va el FAT, opn un mensaje por auqi que muestre en pantalla k no se puede encontrar
}
else{
file=FAT_fopen("/archivo.txt","r");
FAT_fread(&buffer, sizeof(char), 500,file);
FAT_fclose(file);

//aqui tienes lo que hay dentro de archivo.txt dentro de la variable 'buffer'
}


eso para leer un archivo, para escribir uno, cambias un poco y ya ..

//imaginemos que ahun no has declarado buffer
char buffer[500]="Hola, probando probando...";
file=FAT_fopen("/archivo.txt","w");
FAT_fwrite(&buffer, sizeof(char), 500,file);
FAT_fclose(file);


si quieres profundizar mas funciones y que son esos "r", "w", "a".. mirate el archivo "fat/gba_nds_fat.c" que te lo explica todo (aunque en ingles ^^")

edit: se me olvido subir el archivo xD:
http://etk.scener.org/temp/fat.rar
¡Ey, muchas gracias por la detallada explicación! pero... ¿estás seguro de que funciona por fin la escritura en SC SD? te lo digo porque este es el tema que trae de cabeza y leyendo en el .txt pone:

"TODO:
* Add Supercard SD write support..."


Pero bueno, que ya lo pruebo y cuento luego :-)

Muchas gracias de nuevo, además le echare luego un vistazo a tu página que tiene buena pinta y no la había visto aún ;-)

Un saludo.


Editado:

Ah, por cierto, ¿esto se puede hacer desde PALib ó hay algún problema y hay que hacerlo desde libnds?

Otra cosa, como no viene la declaración... ¿de qué tipo hay que declarar 'file'?, quiero decir, que está claro que debe ser FILE ó algo similar, pero ¿cual es el identificador exactamente?

Otra pregunta, ¿funciona en DeSmuME u otros emuladores?
yo creo que ya no tengo más preguntas :-)
De todas formas, yo sigo aquí investigando...

2ª. Edición:

Bueno, pues nada, ya lo he probado en la supercard pero no me ha creado el archivo :-( (tampoco me ha extrañado, jeje)

Aquí pongo el trozo de código, nótese que me meto en un bucle (infinito por cierto X-D) para así asegurarme de que le da tiempo al sistema de crear, escribir y cerrar el archivo antes de salir... pero como ya digo, no hay tu tía...:



FAT_FILE* file;
char buffer[500]="¿¡Qué marcha me llevas!? :-D";

PA_Init(); // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL

file=FAT_fopen("/archivo.txt","w");
FAT_fwrite(&buffer,sizeof(char),500,file);
FAT_fclose(file);

while (1)
{
PA_WaitForVBL();
}
lo de compatibilidad con SCSD.. a mi me han dicho que funciona mi juego (que graba archivos en la tarjeta) funciona con SCSD :S

Yo lo tengo con las palib, aunque antes toqué algo raro de por ahi dentro (no se porque lo hice, ni siquiera probé si iba sin tocar eso que toqué xD)... no se, pruebalo.. si no te va ya te pasare mi version de PAlib para meterle tus librerias k kieras ;)

lo del file se me olvidó ^^" .. yo lo tengo así:

FAT_FILE* file=0;


funciona en el dualis como si fuera GBAMP, aunque no va del todo bien.. si creas un archivo y luevo lo abres para leerlo, te saldra como si estuviera vacío (todo 0's).. no hasta que abras el emulador otra vez. (no se si me explico)

pues en el codigo ese no se que puede estar mal :s prueba a hacerlo como lo he puesto yo y que te mestre en pantalla si ha iniciado las FAT correctamente o no, pon algo de texto despues de cada linea mejor ;)

por ejemplo:


FAT_FILE* file;
char buffer[500]="¿¡Qué marcha me llevas!? :-D";

PA_Init(); // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL
PA_InitText(0,0);

PA_OutputText(0,0,0,"Abriendo archivo...");
file=FAT_fopen("/archivo.txt","w");
PA_OutputText(0,0,0,"Abriendo archivo... OK");
PA_OutputText(0,0,1,"Escribiendo archivo...");
FAT_fwrite(&buffer,sizeof(char),500,file);
PA_OutputText(0,0,1,"Escribiendo archivo...OK");
PA_OutputText(0,0,2,"Cerrando..");
FAT_fclose(file);
PA_OutputText(0,0,2,"Cerrando.. OK");

PA_OutputText(0,0,3,"Loop infinito ^^");
while (1)
{
PA_WaitForVBL();
}



de todas formas, pruebalo con el dualis a ver
Bueno pues nada, si graba en sc sd pos fenómeno.

Voy a probar con el Dualis a ver qué tal y si sigue dando por saco el tema, lo aparco y hasta luego jeje

¡Gracias ETkoala! ;-)

-._.-._.-._.-._

Editado:

Nada, tampoco me funciona en el emulador, no sé si es que faltará algo en el programa ó qué... :-(
Ala, pos ya está, lo he hecho rular y graba perfectamente en la SuperCard SD...

Gracias de nuevo ETkoala ;-)
Hola, he ido probando los diversos ejemplos que habeis puesto y no soy capaz de hacer ni que lea ni escriba, Wonder_Boy, podrias poner como hiciste que funcionara por favor?

Otra cosa, en el modo w (FAT_fopen), crea el automaticamente el archivo en caso de no estar, o lo tengo que tener creado yo previamente?

Muchas gracias.
wuebo escribió:Hola, he ido probando los diversos ejemplos que habeis puesto y no soy capaz de hacer ni que lea ni escriba, Wonder_Boy, podrias poner como hiciste que funcionara por favor?

Otra cosa, en el modo w (FAT_fopen), crea el automaticamente el archivo en caso de no estar, o lo tengo que tener creado yo previamente?

Muchas gracias.
Hola, la verdad es que está bastante bién explicado por ETkoala, por lo que estoy seguro de que debe de estar fallándote alguna tontería como por ejemplo (estoy seguro), el tema de que no estés utilizando la librería FAT correcta...

Recuerda lo que ETkoala comenta en los posts de más arriba de:

1º. Añadir source/fat en la sección SOURCES del MAKEFILE

2º. Añadir el par de includes en el programa (#include "fat/gba_nds_fat.h" y #include "fat/disc_io.h") y...

3º. MUY IMPORTANTE, descomprime la librería que colgó ETkoala en la carpeta source de tu programa de forma que quede source/fat, ya que si no, no se va a compilar y en su lugar va a pillar la que incluye PAlib y entonces no te va a funcionar por un bug o algo así que metieron en la PAlib...

Por lo demás es que está claro y es que estoy seguro que donde estás metiendo la gamba es en el punto 3º...

Ten en cuenta que solo funciona (aparte de en hardware, bonico estuviera) en el emulador Dualis... aunque ahora no sé si habrá alguno más donde funcione...

Si sigue sin funcionarte, vuelves y pegas aquí tu programa ó bién me lo mandas por e-mail...

Suerte.
Hola, antes de nada gracias por contestar, perdona que no haya dado señales de vida antes, pero he estao liadillo ^^

Con respecto al problemilla este que tengo, me sigue sin ir, y creo que lo tengo todo como deberia donde debe.

Me he dado cuenta que la primera vez que compilo el codigo me sale esto:


> "make"
main.c
disc_io.c
gba_nds_fat.c
c:/pruebas/palibtemplate/source/fat/gba_nds_fat.c:83: warning: '__packed__' attribute ignored for field of type 'u8[2u]'
c:/pruebas/palibtemplate/source/fat/gba_nds_fat.c:84: warning: '__packed__' attribute ignored for field of type 'u8[7u]'
c:/pruebas/palibtemplate/source/fat/gba_nds_fat.c:87: warning: '__packed__' attribute ignored for field of type 'u8'
.
. (un monton mas asi)
.
c:/pruebas/palibtemplate/source/fat/gba_nds_fat.c:165: warning: '__packed__' attribute ignored for field of type 'u8'
c:/pruebas/palibtemplate/source/fat/gba_nds_fat.c:166: warning: '__packed__' attribute ignored for field of type 'u8'
c:/pruebas/palibtemplate/source/fat/gba_nds_fat.c:167: warning: '__packed__' attribute ignored for field of type 'u8'
io_efa2.c
io_fcsr.c


No se si tendra algo que ver(supongo que si, un warning no suele ser buena señal xD), un saludo y gracias.
no me funciona !!!!! ya hise todo eso que explican al principio y no me funciona !!!! no graba nada ni puede ver los archivos !!! AYUDA !!!

SALU2
Bueno, ya estoy otra vez con las mismas... X-D

Y es que parece que Mollusk cambió la forma de trabajar interna del sistema FAT en su PAlib por lo que ahora vuelve a no funcionar... :-/

ETkoala, ¿sábes tú en concreto qué líneas hay que añadir y/o quitar ahora en el fuente para que furule de nuevo el asunto de la apertura/lectura/escritura de archivos, refiriéndome siempre a la clásica SuperCard SD? Un saludo y gracias.

Mientras tanto seguiré investigando...
11 respuestas