Hola,
he empezado a echarle un ojo a esto, y la verdad es que para empezar creo que no es necesario que estas utilidades accedan a un disco duro de verdad, al menos desde el lado del PC. Significa que tal y como está programado puede abrir tanto el disco duro directamente (como en los ejemplos cuando se le pasa /dev/sdb) o un fichero físico que luego podemos volcar en crudo al disco duro.
También veo que entre los fuentes hay un unix.c que parece un frontend bastante más completo que ese "subir" que se usa en el script. No lo he compilado aún porque no tengo un linux aquí, sólo estoy mirando los fuentes, pero a ver si puedes hacer esta prueba de concepto, una vez hayas compilado ese unix.c, digamos que a un fichero unix que puedes colocar por ejemplo en /var/tmp para las pruebas:
- Generamos un fichero vacío para probar, digamos de 10Mb:
dd if=/dev/zero of=c64disk.img bs=1024 count=10240
- Con esa utilidad unix que hemos compilado, lo formateamos, creo que se podría hacer tal que así, ya que admite comandos por la entrada estándar.
echo "format" | /var/tmp/unix c64disk.img
echo "mkdir testdir" | /var/tmp/unix c64disk.img
- Cambiamos a ese directorio
echo "cd testdir" | /var/tmp/unix c64disk.mig
- Copiamos un fichero a ese directorio
echo "import <ficheroprueba> <nombredestino>" | /var/tmp/unix c64disk.img
Una vez hecho esto, deberíamos tener una imagen válida para meter en un disco duro (aunque sea de más de 10Mb, el resto quedará sin usar, pero es solo una prueba). Ahora podemos volcar esta imagen a un disco de verdad, suponiendo que está en /dev/sdb, con algo así:
dd if=c64disk.img of=/dev/sdb
Esto no debería hacer ningún daño al disco, más allá de corromper todos sus datos, pero vamos, nada irreversible.
Ya me contarás si esto funciona o que problemas te encuentras y si luego puedes leer el disco desde el C64.
Si esto funciona, es una base para poder hacer un script más potente que copie imágenes complejas y generar las imágenes con sus directorios y todo (eso sí, viendo los fuentes parece que solo se soporta un nivel de directorios) , y se podría hacer un frontend en cualquier lenguaje, ya que me parece que una vez que tenemos acceso al descriptor de fichero, sólo se trata de escribir normalmente sobre el. Toda la parte "esotérica" de los fuentes con comandos de bajo nivel es para la controladora, no para el software de PC.
De todos modos, lo que creo que estaría bien es implementar un sistema de ficheros FUSE. FUSE es una funcionalidad de Linux que permite implementar sistemas de ficheros en espacio de usuario: el kernel proporciona una especie de pasarela para que un programa de usuario implemente el sistema de ficheros y se pueda acceder a el desde un directorio determinado. Por ejemplo ntfs-3g es un sistema de ficheros FUSE si no me equivoco.
¿Ventajas? Ya no necesitamos un frontend, porque los ficheros los vemos directamente de forma natural, como si hubieramos montado un CD o un floppy, y cualquier visualizador de ficheros nos sirve para copiar a el o desde el de forma natural. La misma implementación puede hace las transformaciones necesarias a la hora de copiar los ficheros (truncar nombres demasiado largos, impedir crear directorios de más de los niveles que se soporten,...). Tan solo tendríamos que hacer algo como:
fuseiec64 /dev/sdb /mnt
Y podríamos acceder ya en /mnt a los ficheros y directorios del disco IECATA con los comandos normales del sistema operativo.
¿Desventajas? Sólo funcionaría en Linux o a lo sumo en OSX (que también soporta FUSE, pero como todo lo de Apple, será un poco diferente, y probablemente tengamos que firmar el binario como desarrollador autorizado para no tener que desactivar todas esas protecciones bonitas que trae.
A mi ahora mismo me llama más lo de FUSE, más que nada porque nunca he hecho nada de eso, y parece una solución elegante. De hecho lo pensé en su día para los DSK, cuando estaba intentando mejorar las dsktools con un frontend gráfico, proyecto que tengo algo abandonado.
A ver si por la tarde tengo un rato y compilo las utilidades en un linux para probar esto yo mismo.
Ya me contarás.