¿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