¿Cómo uso un emulador de diskettes floppy en Ubuntu?

Juan Perón habla sobre los predicamentos que necesitamos contabilizar en nuestra acción de Conducción, a la vez que explica cómo utilizar un emulador de disquetes 3 1/2 pulgadas y 1,44MB para memoria Flash Gotek en Ubuntu.


¡Trabajadores!

Siempre que puedo doy consejos que pueden servir a todos en su vida diaria, a fin de lograr el sano bienestar y la felicidad que merecemos por justo derecho. La Conducción tiene un espacio, pero sobre todo, tiene un tiempo. El dominio de esta dimensión temporal es imprescindible también para el éxito de nuestra Lucha. El tiempo puede manejarse, pero ello requiere un cabal conocimiento de las técnicas necesarias.
Así como el nuestro no es un Partido sino un Movimiento, debemos reconocer también en el hardware informático ciertas particularidades. Estos equipos computados no son en exclusiva propiedad de los sistemas de la información, sino que pueden y son empleados en una amplia variedad de recursos. Por tal motivo no es extraño actualmente encontrar electrónica de consumo dentro de máquinas de tejer o bordar eléctricas, etiquetadoras de volumen, fresadoras CNC, instrumentos musicales electrónicos, etc.
Contar con el último hardware es una bendición, pero también hemos estar en condiciones de contemplar el uso de hardware más veterano, que podría ser de dificultoso o costoso recambio. En ocasiones, podremos encontrarnos que no podemos reemplazar al hardware viejo así como así... Y en otras ocasiones no querremos hacerlo por un humano sentido de cariño dispensado hacia las máquinas.

Como Conductor, puedo decirles que - siempre y cuando nuestras capacidades técnicas y ganas lo permitan - podemos continuar usando hardware del ayer. Uno ha de prever los naturales inconvenientes que hacer esto representa, pero en ocasiones lo veremos ampliamente justificado.

Uno de los inconvenientes intrínsecos consiste en el de la obsolescencia de los medios de almacenamiento, ya sea por la dificultad de conseguirlos, o por el natural deterioro de sus partes móviles. Muchos equipos industriales presentan unidades de disquete como medio de almacenamiento y control de sus funciones, y si bien tales aparatos operan adecuadamente dentro de sus parámetros de mantenimiento (tal vez pensados para varias décadas de trabajo), sus unidades de disco son las que se encuentran obsoletas.

La computación llamada "retro" también suele responder a los mismos esquemas, ya sea operativo real o puramente de coleccionismo aficionado.

En la política es necesario conocer la historia para llegar a un buen puerto en cualquiera de los quehaceres que podamos emprender, y en el caso de los sistemas computados, esta también será práctica como base para apreciar. Hemos de saber que las unidades de discos rígido u ópticos actuales emplean el estándar Serial ATA desde el año 2004, pero en equipos de antaño (1986 en adelante) se empleaba el estándar de conexión IDE de 40 pines (ya no se fabrica). Con anterioridad a ello se usaban una variedad de estándares MFM que requería placas controladoras especiales. Esto hace que los discos ópticos CD-ROM constituyan una opción viable para equipos desde mediados de los 90s dotados de tales lectoras, pero no para todo tipo de equipos. Estas unidades lectoras sufren el mismo problema de estándares, y las de conexión IDE se dejaron de fabricar hace tiempo.

La posibilidad de aplicación en estos caso es la de recurrir a los disquetes, medios de almacenamiento portátiles de bajo costo, tradicionales en dicha era. Se trata de discos magnéticos de ánima flexible orientados al transporte físico de los datos; desde principios de los 80s se popularizaron los discos de 5 1/4 pulgadas (de varias capacidades hasta su definitiva en la IBM PC, de 1,2MB). Estos no se utilizaron mayormente en aplicaciones de la industria.
A principio de los 90s los disquetes de 5 1/4" quedaron ampliamente obsoletos. y fueron progresivamente reemplazados por los modelos de 3 ½ pulgadas, con medios de carcasa plástica rígida y con aleta metálica deslizante.

Estas unidades inicialmente permitían una capacidad de 720Kb y en seguida pasan a permitir 1,44MB.
Como conexionado de interfaz a la controladora de discos flexible, estas disqueteras emplean un cable FDC normalizado de 34 pines tipo cinta, junto a un cable de alimentación de 5v a Molex.


Desde el punto de vista lógico en la arquitectura IBM PC pueden emplearse dos unidades por controlador, las cuales reciben la nomenclatura GNU con Linux de /dev/fd0 y /dev/fd1 (A: y B: en MS-DO$ o Window$).

Las unidades capaz de leerlos se hicieron increíblemente populares a partir de 1990 no sólo en la IBM PC, sino que por su tamaño y consumo de 12v estandarizado, se incluyeron en una gran variedad de dispositivos diferentes. Es por ello que son los más requeridos y adecuados para mantener en funcionamiento dicho hardware. Se fabricaron hasta aproximadamente el año 2010, y si bien pueden encontrarse usadas en precios relativamente asequibles y buena condición de funcionamiento, esto no será así por siempre, ya que dependen también de la calidad de los medios, que ya no se fabrican.

Debemos tener en cuenta también que a principios de la década del 2000 aparecieron las disqueteras externas de 3 1/2" con interfaz USB, capaces de operarlos en los entornos munidos de este dispositivo, pero estas no son capaces de operar en sistemas que no estan dotados de esta interfaz aparecida en 1996 (y recién masificada unos años después).

Los disquetes fabricados entre principios de los 90s y mediados de los 90s - incluso hoy - suelen operar de muy buena forma, pero lamentablemente a partir de mediados de los 90s la calidad de fabricación de los mismos disminuyó drásticamente, al punto de que los discos fabricados a partir del año 2000 suelen tener muy graves problemas de durabilidad, y operar de forma mediocre. Tal vez ello es uno de los motivos por el cual muchos los recuerdan así.

Por tal motivo y para solucionar estos inconvenientes que he expuesto - amén de evitar tirar un hardware viejo por la ventana - es que surgen los emuladores de discos floppy para memorias Flash. Estos aparatos de distintas marcas (Flexidrive, Gotek, Ipcass) vienen dotados con los nombrados conectores traseros normalizados (una toma miniMolex para alimentación e interfaz de 34 pines para floppy) a fin de conectarlos a un dispositivo provisto ya de una controladora de disquetes, y reemplazar finalmente la antigua disquetera.
Básicamente estos aparatos funcionan de la siguiente manera: debemos colocar en el puerto USB un pendrive (no incluido) y luego formatearlo usando particionado MSDOS/FAT. Para ello se emplea funciones incorporadas en el mismo emulador o un programa incluido. Como los pendrives actuales cuentan con mucha más capacidad que los 1,44MB (1,39MiB luego de formateado), el software incluido se encarga de dividir lógicamente la capacidad del pendrive en 99 o 999 particiones (dependiendo el modelo de emulador). Cada una de estas particiones opera como un banco de memoria independiente, y almacena el contenido de un diskette. Una vez insertado este pendrive formateado, y por lo cual por medio de los botones y el display luminoso que el emulador cuenta en su frente, podremos acceder hasta 99 o 999 disquetes virtuales con fin de realizar operaciones de lectura y escritura. Solo podremos "usar" un banco de memoria por vez (salvo que poseamos dos unidades de disquete o emuladores en un sistema).

En este caso particular versaremos sobre un modelo bastante común y tal vez algo antiguo, de la marca "Gotek" (provienen de la República Popular China). A este lo acompaña una documentación mediocre escrita en el idioma de Mao, por lo cual os ilustraré en su uso particular de forma Justicialista. Por ejemplo, algunos modelos de emuladores mas avanzados como el Ipcass realizan particiones  "virtuales" armando directorios o carpetas numeradas, cada una de ellas limitada para almacenar aquel máximo de 1,44MiB. Sin embargo, en este modelo Gotex y varios otros el esquema es más complejo ya que las particiones de imagenes quedan todas unidas en un archivo "img", y además el software provisto para realizar el formateo específico en el pendrive, además de estar en chino, funciona solo en Windows 98 o XP.

Este emulador Gotek sólo soporta el formato IBM/PC de Alta Densidad, 1,44MB MFM (emulando un disquete de 3½ pulgadas). Puede operar en FAT16 (tipo MSDOS) o FAT32 (tipo Window$). No soporta 720kb ni otros formatos como los disponibles en diskettes de 5 1/4 pulgadas, en 1,2MB o 360kB, por lo cual podría fallar en otros equipos que no tengan un controlador de discos flexibles (FDC) "tipo IBM". El FDC de los equipos IBM PC espera que la unidad produzca 300rpm al girar el disco, y produce una señal MFM de 500kbit/s de transferencia, codificando 18 sectores por pista en sincronismo con el esquema estandar IBM. Por tal motivo, esto hace que no existe posibilidad de emular disquetes protegidos contra copia o de instalación tipo DMF, formatos de doble densidad o GCR utilizados en otros equipos diferentes.

Aún así, si lo queremos para reemplazar una disquetera de PC en 1,44MB, no presenta falla alguna.

Formatear el pendrive y preparar su uso

Desde el emulador:

Afortunadamente existe una solución a nivel hardware preprogramada en este emulador Gotek particular que nos evita tener que usar tal software mediocre. Por lo que he evaluado, cualquier pendrive funciona correctamente. Idealmente deben ser de 256MB o mayores, pero no recomiendo muy grandes con este tipo de dispositivo. Si no hay un pendrive conectado, en el display se indica C4. Una vez que insertamos uno indicará C5, luego C6 y finalmente 00.

Para formatear el pendrive en el emulador debemos apagar el equipo, dejar colocado un pendrive en el puerto USB (usaremos un viejo pendrive de 1GB), y reencendemos el equipo mientras mantenemos presionados los dos botones del frente del emulador (el indicado con las flechas → y ←). En pocos segundos nuestro pendrive recibirá el formato FAT requerido. Ello hará que el emulador borre todo contenido que hubiese en el pendrive y lo prepare (indicará progresivamente U01, 126, F01, 00 en el display).

Al formatear el pendrive, el banco 00 recibe el tamaño del pendrive completo (y no funcionará correctamente en este modo, recibiremos errores erráticos de lectura y escritura). De modo que no funciona si queremos usarlo como un medio de almacenamiento mayor a 1,44MB en nuestro viejo sistema. Debemos avanzar el emulador hasta el banco 01 usando el botón →, para pasar al primer disquete virtual en el emulador. Debemos estar atentos a que en este modelo no existe protección de escritura para los discos virtuales (por lo cual el sistema siempre podrá borrar los datos existentes en los floppys virtuales).

Desde GNU con Linux:

Nuevamente, el emulador viene con un software para este menester, pero el mismo está en chino y sólo opera bajo Window$. Por tal motivo, os enseñaré como usar la poderosa aplicación de dd de GNU con Linux para realizar los procedimientos básicos que hace este software. Su uso en GNU con Linux es algo más complejo - naturalmente - pero también mucho más poderoso, con la ventaja de que lo podremos hacer perfectamente con software completamente libre y de bajo nivel.

En los siguientes comandos, emplearemos bloques de datos de 1024 bytes sólo a manera de facilitar los cálculos (los disquetes reales de 1,44MB usan sectores de 512 bytes).

Debemos crear en nuestro disco rígido una imagen "virgen" de 153.600KB (150MB aproximadamente) con cero contenido, llamado imagenesunidas.img. Este tamaño  con el tamaño total adecuado para almacenar todos los 100 bancos de disquetes virtuales en el formato usado por el emulador. Para ello abrimos una Terminal con Ctrl+Alt+T e ingresamos el siguiente Comando de Organización:

dd if=/dev/zero of=imagenesunidas.img bs=1024 count=153600

...y luego copiamos estos 100 bancos de floppys virtuales unidos al pendrive, a partir de la posición count=1 (lo que representa el inicio físico del pendrive):

dd if=imagenesunidas.img of=/dev/sd? bs=4M


(naturalmente reemplazamos /dev/sd? con la nomenclatura de dispositivo que corresponda a nuestro pendrive, si no la sabemos podemos usar:

sudo fdisk -l 

...para que el sistema nos liste nuestros dispositivos y ver a cuál letra corresponde el pendrive).


Usar el emulador de diskettes Gotek

Si estamos en GNU con Linux, podremos colocar el pendrive en el emulador de floppys, pasar al banco 01, montarlo, y comenzarlo a usar.

Si estamos en Window$ / FreeDOS / MS-DO$, tal vez queramos formatear el diskette virtual de la posición 01 antes de comenzar a utilizarlo. Para ello indicamos:

format a:

Ya con ello podremos usarla como si se tratara de un disquete común. Podremos hacer lo mismo con el resto de los bancos de disquetes virtuales (hasta el 99). Si quisiéramos hacer un disquete virtual de arranque, el comando bajo MS-DO$ o FreeDOS sería:

format a: /s


Escenario 2: Tenemos una disquetera funcional real y queremos crear archivos de imágenes a partir de disquetes físicos, en GNU con Linux:

Supongamos que tenemos un sistema que cuenta con una disquetera real y disquetes que queremos virtualizar. Para crear un archivo de imagen espejo (img) a partir de estos disquetes físico podremos utilizar:

cat /dev/fd0 > /ruta/a/imagendediskette.img

De esta manera podremos respaldar nuestros viejos disquetes a una serie de archivos de imagen *.img, los cuales podremos guardar en otros medios de almacenamiento (incluyendo el emulador) y asegurar su contenido congelado. Esto sirve independientemente del formato que haya tenido el disquette en sí.

Para hacer el paso inverso y restaurar un disquete a partir de una de estas imágenes *.img, podríamos colocar un disquete virgen en la disquetera e ingresar el siguiente comando de organización:

cat /ruta/a/imagendediskette.img > /dev/fd0



Escenario 3: queremos copiar las imágenes de diskettes al pendrive, para usarlo en el emulador.

Para ello debemos copiar 1.440kB desde imagendediskette.img al fichero de los 100 bancos de memorias (al que habíamos llamado imagenesunidas.img). A estos 1.440KB no debemos ponerlos en cualquier lado, sino en la posición física que tenga el corrimiento correcto (offset). Esta se delimita haciendo el cálculo de 1536 multiplicado por el número de banco de memoria del pendrive que querramos utilizar). La sintaxis del comando sería:

dd if=imagendediskette.img of=imagenesunidas.img bs=1024 count=1440 seek=(1536 x nro. del banco de memoria del emulador) conv=notrunc

Un ejemplo suele aclararlo todo, como decía Napoleón. Supongamos que quisiéramos copiar una imagen llamada floppy1win311.img al archivo de 100 imágenes de discos unidas llamadas imagenesunidas.img, pero lo queremos colocar específicamente en el banco memoria número 5 del emulador. Para ello ingresaríamos debemos usar el offset adecuado en el parámetro "seek", en este ejemplo sería 7680 (1536 por la variable, que es el banco 5, nos da 7680):

dd if=floppy1win311.img of=imagenesunidas.img bs=1024 count=1440 seek=7680 conv=notrunc

...con esto habremos inyectado la imagen del floppy "floppy1win311" en el banco número 5 de las 100 imágenes unidas del pendrive. Acto seguido hemos de copiarlas de nuevo al pendrive, como hicimos al formatear desde GNU con Linux, a través de la siguiente sintaxis:

dd if=imagenesunidas.img of=/dev/sd? bs=4M

Recordemos averiguar cual es la nomenclatura de nuestro pendrive en el sistema, por medio del comando sudo fdisk -l. En nuestro ejemplo, si el pendrive recibe la nomenclatura /dev/sde, entonces el comando de organización sería:

dd if=imagenesunidas.img of=/dev/sde bs=4M

Nota: Al final del artículo os dejaré como anexo los Offsets adecuados que deben indicarse dentro del parámetro "seek" para cada uno de los 99 bancos de memoria.


Escenario 4: queremos respaldar las 100 imágenes unidas desde un pendrive USB

En GNU con Linux, enviamos el siguiente comando para respaldar las 100 imágenes de disquetes desde el pendrive nomenclado /dev/sd? a respaldodelasimagenes.img

dd if=/dev/sd? of=respaldodelasimagenes.img bs=1024 count=153600


Escenario 5: Si queremos sólo respaldar uno de los bancos de memoria del pendrive del emulador a un archivo de imagen

Supongamos que queremos crear un archivo de imagen llamado disketteespecifico.img, entonces anotamos el banco de memoria en donde estaba, colocamos el pendrive en nuestro sistema GNU con Linux e ingresamos:

dd if=/dev/sd? of=disketteespecifico.img bs=1024 count=1440 skip=(1536 x nro. de banco de memoria del emulador)


Escenario 6: Queremos reemplazar un disquete virtual específico dentro de la imagen unida de 100 disquetes dentro del pendrive USB.

Esto lo podemos hacer directamente bajo GNU con Linux si sabemos el banco específico que queremos reemplazar. Debemos usar la siguiente sintaxis:

dd if=undisquete.img of=/dev/sd? bs=1024 count=1440 seek=(1536 x  nro. de banco de memoria del emulador)


Escenario 7: Queremos generar un nuevo disco floppy, copiarle un archivo, y escribir dicho fichero en uno de los bancos de memoria del emulador.

Ahora bien, si quisiéramos crear una imagen de un disquete virgen de 1,44MB formateado según el sistema de archivo clásico de MS-DOS, pero desde nuestro GNU con Linux, tendríamos que usar:

mkfs.msdos -C /ruta/a/imagenvacia.img 1440

...y para montarla en nuestro sistema:

sudo mkdir /media/floppy1/
sudo mount -o loop imagenvacia.img /media/floppy1/


Dentro de la carpeta /floppy1 montada, podremos guardar los ficheros que nos hagan falta, y luego podremos copiar la carpeta entera al banco de memoria deseado del pendrive como ya se ha explicado (sólo debemos tener presente que no podremos superar en esta carpeta los 1.440kB o 1,44MB de almacenamiento).

En resumen, el emulador de discos floppys de 3 ½" en memoria Flash opera adecuadamente a partir del banco de memoria 01 en GNU con Linux, y también operan excelentemente bajo MS-DOS 6.22, Windows 3.1, Windows 95, y FreeDOS. Si bien los programas incluidos no son prácticos, gracias a estas líneas de comando podrán almacenar en un pendrive una buena cantidad de archivos de imágenes. En mi caso he copiado las imagenes de MS-DOS 6.22 en castellano junto con las de Windows 3.11 en castellano.

Os incluiré los valores de desvío (Offset) que debemos indicar como variable del argumento "seek" para acceder a cada banco de memoria del emulador. Junto a cada banco podremos también anotar

Banco Offset (Decimal)
0     0
1     1536
2     3072
3     4608
4     6144
5     7680
6     9216
7     10752
8     12288
9     13824
10    15360
11    16896
12    18432
13    19968
14    21504
15    23040
16    24576
17    26112
18    27648
19    29184
20    30720
21    32256
22    33792
23    35328
24    36864
25    38400
26    39936
27    41472
28    43008
29    44544
30    46080
31    47616
32    49152
33    50688
34    52224
35    53760
36    55296
37    56832
38    58368
39    59904
40    61440
41    62976
42    64512
43    66048
44    67584
45    69120
46    70656
47    72192
48    73728
49    75264
50    76800
51    78336
52    79872
53    81408
54    82944
55    84480
56    86016
57    87552
58    89088
59    90624
60    92160
61    93696
62    95232
63    96768
64    98304
65    99840
66    101376
67    102912
68    104448
69    105984
70    107520
71    109056
72    110592
73    112128
74    113664
75    115200
76    116736
77    118272
78    119808
79    121344
80    122880
81    124416
82    125952
83    127488
84    129024
85    130560
86    132096
87    133632
88    135168
89    136704
90    138240
91    139776
92    141312
93    142848
94    144384
95    145920
96    147456
97    148992
98    150528
99    152064