03 june 2022
¿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