Habi Hablóg
Declaro:
XML válidoXHTML válido800x600 +
RSS válidoCSS válidoNavegador digno
  Blog   Archivo   Contacto   Administración  

Acerca de

Matemático, informático, aficionado a la electrónica, friki... y otras cosas que no vienen a cuento ni pasan los filtros de palabras.

¿Queríais un blog? Ahí va.

Red antisocial

¡Me van a volver loca! 2.0
La Fragata Portuguesa

Z
¡Me van a volver loca!

Últimos posts

Crackeo preservativo
Restaurando ROMs
Una cosa lleva a la otra
Desbloqueando logros
Teclado en el PCW

Últimos comentarios

genocho
Victor Cortes Abad
Habi
Enrique
Dandare

Calendario

No hay fechas.

Categorías

Chorradas
Paranoias
Posts lúcidos
Tecnoesoterismo
Yuyus

Cenas de Abj

Abj debe 7 cenas.

Frase célebre

Z de Zarith dice: habi llevará el alcohol y yo llevaré los hielos 
 
Abj dice: ¿y yo las tiritas?

Adiós, Floppy, adiós

Habi - 10/01/2009 2:18:13 - Tecnoesoterismo

Finalmente he decidido quitar la disquetera de mi ordenador, y poner un lector de tarjetas en su lugar. Como despedida, este post.

No os hablaré de la vida y milagros de Alan Shugart, pero sí diré que al tipo de interfaz de disco que se encuentra en los PCs se le llama Shugart. Aunque tiene un poco de modificación con respecto al interfaz SA400 original como ahora veremos, es prácticamente la misma cosa.

Originalmente, en la norma había provisión para 4 unidades de disco, y el cable era una cinta plana de 34 conectores, con todos sus conectores IDC. La unidad lógica de cada unidad de disco se elegía con unos puentes en la propia unidad. IBM en su implementación redujo el número de unidades a 2, separó la señal del motor para cada unidad y dispuso las líneas pares de forma que si se invirtiesen (cruzando parte del cable, pines 10-16) se seleccionase el disco sin tener que hacer puentes.

Por eso vienen todos los discos configurados por defecto como DS1 (unidad B), y para que sean DS0 (unidad A) deben ser conectados al extremo tras el cruce. Como cultura general añadiré que todas las líneas impares están conectadas a masa, como en un cable ATA de 80 pines (existe un mecanismo para detectar unidades con los pines 3 y 5, pero en la práctica casi nunca se ha usado).

Diferencias:

Pin

SA400

IBM

6 DS3 Nada (o ED, 2.88 MB)
10 DS0 Motor DS0
12 DS1 DS1
14 DS2 DS0
16 Motor (¡todas!) Motor DS1

Ahora llega la frikada; la hice hace algún tiempo, antes de las fiestas. Esta vez no hay fotos, pero es fácil de seguir. Hay par de pines interesantes, son el 30 (los datos tal cual los lee la unidad) y el 8 (marca índice). Esos pines son que usa el autor del Disk2FDI para hacer su cable, con el cual se pueden leer ambos a través del puerto de la impresora. No obstante, no todo puerto paralelo vale para eso, y bajo Windows o Linux es imposible al no ser SOs en tiempo real.

La idea es esta: hacemos una operación de lectura, pero pasamos de los datos (o fallos) que nos dé el controlador de disco. Lo que hacemos es capturar a una determinada frecuencia los datos a través del puerto de la impresora, y luego tranquilamente según sea la modulación separar los datos de la señal de los de reloj y listo. Pista leída a bajo nivel. Después resta leer el formato lógico de la pista, localizar sectores, volcar información de cada uno, etc.

Yo pensé hacer una interfaz Shugart completa controlada por un PIC y que volcase los datos vía USB, pero al final fui más cutre: usé los 3 puertos B, C y D de un 16F877A como un contador, para generar las direcciones A0-A23 de una memoria (usadas realmente A0-A19); usé una memoria estática de 100ns que tenía, una DS1265W, convirtiendo a 3.3V usando 2 resistencias como divisor de tensión, y conectando I0 así a la salida de datos la disquetera (tras pasar por un 1N4148, y lo conecto también al PIC; de esa forma puedo leer luego los resultados). Desperdicia 7 bits de cada byte, pero es muy simple. También para simplificar leo desde el PIC hasta llenar el Mb (independientemente de la velocidad a la que leo o de si la disquetera ha dejado de leer) e ignoro (ni conecté) la señal de índice.

Después basta usar de nuevo el PIC para mandar los datos por el puerto serie (software, puerto A; el UART hardware está en el puerto C, conectado a la memoria) y listo.

Dado lo cutre del invento, los resultados fueron bastante buenos. Pude leer los datos en crudo y vi que se correspondían a los datos que debería tener esa pista del disco (si bien al final no hice ningún programa que separase los datos leídos de la señal de reloj y reconstruyese la estructura del disco).

Y es que YA hay al menos un programa que hace eso; y que los disquetes están obsoletos; y que tengo proyectos más interesantes (bajo mi punto de vista). Supongo que esa es la lección de este post.



Post cerrado