Esto por ahi sea una locura, o ya haya algo libre que funcione para lo que pretendo, pero estuve buscando y hasta ahora parece ser que lo mas practico es aguantarse el sistema FAT, con todas las desventajas que tiene.
La idea viene de hace mucho tiempo, porque hace años que quiero construir alguna computadora de 8 bits (mucho antes de que este sitio existiera), y con eso tambien viene el desarrollo del sistema operativo y un sistema de archivos adecuado.
Cuando me plantee aca el proyecto de diseñar una computadora, estuve viendo como convenia almacenar los datos en disco, y se me ocurrieron varias alternativas, que basicamente se podrian resumir en usar nativamente algun sistema FAT, lo que tiene desventajas incluso contra los nombres "largos" que permitian la Spectrum o la Commodore 64, o utilizar un sistema de archivos propio, lo que dejaba mas trabajo a resolver para intercambiar datos con una PC. En esta ultima alternativa, tambien habia varias opciones posibles, por ejemplo escribir directamente una tarjeta flash y escribir alguna aplicacion para PC, Mac o Linux (o las 3) que interpretara de forma directa el contenido de la tarjeta, o en el peor de los casos que solo leyera o escribiera una imagen completa de la tarjeta para luego navegarla con una aplicacion que modificara ese archivo.
Pero la opcion que me parecio mas interesante, y mas compleja aunque funcionaria de manera transparente para la PC/Mac, es poner un PIC como "controladora de disco", para que el procesador de 8 bits (siempre pensando que puede ser tanto un 6502 como un Z80) accediera de forma indirecta al disco, de manera similar a una disketera de Commodore, donde se envian comandos y es el sistema operativo de la disketera el que se encarga de almacenar y recuperar la informacion. Ademas de la ventaja de liberar al procesador del consumo de memoria y proceso organizando el directorio y los archivos, tendria otras ventajas como soportar tamaños de disco inmanejables para el procesador, o se podria tener imagenes de disco que pueden ser montadas como un disco real, o varias particiones que se intercambiarian de manera transparente al sistema. Esas son opciones de uso comun en placas como la SD2IEC, o las emuladoras de disketeras de PC, pero ahi se sigue usando FAT como sistema de archivos nativo.
La idea seria tener un sistema nativo propio, haciendo un promedio de los sistemas de los distintos equipos de 8 bits, con esto me refiero en particular al formato de los nombres y los caracteres permitidos, de forma tal que a la maquina que se conecte, los nombres siempre se mantendrian en el nuevo sistema de archivos. Este sistema tendria que ser apto para manejarse con poca memoria (la del microcontrolador), por lo que muchos sistemas antiguos podrian servir, pero tenemos el problema de que hoy todo el mundo consigue tarjetas o discos muy grandes, y logicamente quiere aprovecharlos, por lo que tendria que ser un sistema de archivos en estilo 80s pero a la vez soportar varios GB de almacenamiento. Eso es lo importante en cuanto al sistema nativo que se escribiria en las tarjetas/discos.
Ahora en cuanto a la interfaz, tanto para la maquina de 8 bits (o microcontrolador cliente) como para la PC con la cual se intercambiaria informacion, tambien hay muchas alternativas. Yo empece pensando esto para un sistema nuevo, por lo cual no importaba demasiado la interfaz ya que el sistema operativo tambien seria propio, pero si pense que la computadora de 8 bits podria servir tambien de emuladora de disco, en particular para Commodore, por lo que pense en incorporar un bus IEC, y diseñar un sistema de archivos que soporte los nombres de archivo de la 1541. Pero bien se podria conectar el PIC directo al bus del procesador y emular una IDE y un sistema de archivos diferente al nativo, esto es, hacer una traduccion entre la tarjeta y lo que espera la computadora. Por poner un ejemplo, se podria tener la tarjeta en el sistema de archivos propio y devolver un disco virtual a una MSX, tal como la maquina espera, o se podria emular una IDE y "engañar" a una Beer haciendole creer que tiene un disco real conectado. Todo eso requiere mucho mas trabajo y no se si vale la pena, pero lo pongo como posibilidades, que tampoco se hasta que punto son realizables. Algo mas practico seria utilizar una interfaz como SPI o un par de puertos de E/S manejados por el Z80, o usar IEC o RS232, todo eso depende del sistema donde se vaya a usar, pero resumiendo esto, habria una interfaz de soft que traduciria la informacion a la maquina de 8 bits (si el sistema de archivos esta bien diseñado esa traduccion seria casi directa).
Por ultimo, la interfaz con la PC seria la mas interesante, ya que ahora hay muchas posibilidades en los microcontroladores, aca tenemos la parte de soft y la de hard. Por el lado del soft, tambien pense en que el PIC se pudiera conectar a una PC por ejemplo por USB y apareciendo ante la PC como un dispositivo de almacenamiento masivo, formateado en FAT o algun otro sistema conveniente. Estos serian sistemas virtuales, ya que tambien el PIC haria una traduccion a y desde el sistema nativo. La ventaja de hacer aparecer todo como FAT es que nos evitamos el tener que escribir drivers o aplicaciones para intercambiar datos en la PC, pero tambien nos permite que la PC vea solo lo que queremos. Un ejemplo podria ser tener varias particiones nativas, una usada cuando lo conectamos a una C64, otra que se use con una MSX, cuando conectamos por USB el PIC podria mostrar todo junto, aparecer como dos tarjetas, o montar solo una particion que elijamos. Hasta se podria tener archivos virtuales con funciones especificas, como ocurre con la Catweasel en Amiga. La Catweasel muestra los diskettes de C64 en la Amiga como si fueran unidades de Amiga, no hay que usar ninguna aplicacion especial para accederlos, y ademas tiene un par de archivos virtuales, uno que no recuerdo ahora como se llama, que si se lee o escribe, reorganiza el diskette para que no este fragmentado, basta con listar el archivo y se dispara ese proceso. El otro archivo virtual se llama $D64, que tampoco existe fisicamente en el disco, pero sirve para obtener imagenes del diskette en formato D64, y tambien para escribir una imagen al diskette. Si queremos tener el D64 del diskette simplemente copiamos el archivo $D64 a otra unidad, y ya esta, lo mismo si queremos escribir un D64 al diskette, copiamos el D64 al disco con el nombre $D64, y la imagen genera el diskette real. Todo esto viene a que podriamos desde la PC escribir a un archivo virtual que monte la particion que queremos de la tarjeta, o todas como si fueran tarjetas distintas, o hacer que se formatee o copie una particion a otra, o que podamos obtener una imagen real de la tarjeta como un archivo a la PC, o que podamos copiar una imagen a la tarjeta, entre otras posibilidades.
Todo esto parece bastante trabajo para no usar FAT, pero hay que tener en cuenta que desde el lado del PIC y la PC hay mas recursos de soft y hard para lograr algo que haga el trabajo, pero no ocurre lo mismo con las maquinas de 8 bits, en particular si queremos usar tarjetas o discos grandes. La idea fundamental es tener un sistema de archivos que sea perfectamente manejable por una maquina antigua pero con tamaños de disco actuales, y no solo computadoras, tambien seria util para cualquier otro proyecto de microcontroladores donde haga falta archivar informacion. Ademas, la parte de simular una unidad de almacenamiento por USB no es estrictamente necesaria, siempre se puede escribir una utilidad que acceda directo al formato propio de la tarjeta.
En fin, estas son ideas de años, y tengo claro que hacer siquiera un 10% de todo eso ya es un trabajo enorme, pero quiero hacer algunos proyectos que manejen tarjetas SDHC con PIC y no me convence usar FAT, por el desperdicio de espacio que implica y por no tener claro todavia si aplican las patentes del manejo de nombres largos en FAT. Hay otros sistemas de archivos, pero comerciales y hechos para computadoras, o libres pero con gran consumo de memoria (como los de Linux), yo necesito poder manejarme con poca RAM, 512 bytes o como mucho 1K. Tambien considere usar FFS de Amiga (limitado a 4GB) o SFS (limitado a 128GB, aunque puede ser mayor segun el formato), ya que son legibles en Linux y accesibles en Windows con WinUAE, pero desconozco los requerimientos de RAM que tienen para manejarlos con un PIC.
Me interesaria saber opiniones acerca de esto, como usuarios, acerca de que caracteristicas tendria que tener un sistema de archivos, o de que forma se tendria que intercambiar los datos con la PC, o conectarse a una maquina de 8 bits. Tambien esta la forma dificil y no portable, como las placas diseñadas para cada maquina particular, donde hay que escribir una ROM que reemplace las rutinas originales, pero me parece mucho trabajo y en cada plataforma el programa seria muy distinto, por eso pense en tener un PIC que haga de traductor.