Emulador de disquetera.
El semi ilusionario proyecto este, de crear un emulador (por hardware) de disquetera ocurrió cuando me planteé la siguiente pregunta: ¿Cómo puedo lograr que una computadora bootee sin disco duro, ni cdrom, ni disquetera, con el menor precio posible de componentes adicionales?
Entonces de golpe apareció la maravillosa oferta de: 128 MB de Compact Flash con enchufe IDE por U$S 15, razón por la cual tuve que tomar este valor como una cota para el costo del sub proyecto.
Introducción.
¿Qué metodos tiene una pc para bootear, sin cdrom ni disqueteras ni discos duros?
- Bootear con tarjeta de RED con chip de booteo, lo cual descarto instantáneamente por los altos costos que tienen estos chips y los altos costos que hay también en el proceso de escribirles el ROM.
- Bootear con USB mass storage device, como un pendrive común y corriente… Cosa que también descarté porque no conozco ningún motherboard viejo que sea capaz de bootear desde un dispositivo usb.
- Fabricar una tarjeta que implemente algún segmento de direcciones de memoria de los que tiene prefijado el procesador para buscar un dispositivo booteo.
- Usar un chip de memoria Compact Flash con enchufe IDE.
- O evidentemente fabricar un hardware sencillo que sea capaz de emular una disquetera a fuerza de un PIC económico.
Algunas razones para no poner un disco duro en el techo.
Aviso: Si a usted no le interesa entretenerse un poco, podrá saltearse esta sub sección y quedarse tranquilo de que no se perderá nada importante.
- Porque si se llega a caer y estaba en el techo, va a caer de mucha altura y se va a romper, sin embargo si está dentro de una casa, a la altura del piso, resiste el golpe.
- Porque tiene claustrofobia y si va a estar en el techo va a tener que estar adentro de una caja estanco y va a estar muy apretado.
- Porque tiene vértigo, y aunque es un disco duro, es también comúnmente conocido el hecho de que los discos tienen vértigo.
- Porque a esas alturas hay menos presión atmosférica y explotan los discos duros porque están blindados, y todos sabemos que si hay más presión adentro que afuera del disco, se producen fuerzas distribuidas uniformemente en las tapas del disco, que con suficiente presión llegan a estallar, obviamente matando a toda persona ubicada a menos de 14.2 metros de distancia del disco.
- Porque si llueve se moja, y si se moja se pone blando.
- Porque en verano le da el sol y levanta una temperatura bestial, por lo que se derrite y de nuevo, queda blando.
- Porque si llega a haber una granizada, el gran impacto de los cachos de hielo puede en gran medida hacer que el disco se rompa.
- Porque las interferencias electromagnéticas que ocurren cuando caen los rayos en los discos, hacen que cambie el valor a 1 lógico (+5v) del cable que lleva la información del bit de paridad, haciendo que se tenga que releer el sector en cuestión, provocando además una evidente perdida de rendimiento.
- Porque a estas alturas los discos, al igual que los jugadores de fútbol, tienen un mal rendimiento.
- Es ampliamente conocido que la telefonía celular utiliza las frecuencias de microondas, y todos sabemos que pasa si metemos un disco duro en un microondas… que tire la primera piedra quien nunca puso un disco duro en un horno.
- Porque si el disco se coloca en una caja estanco soportado por un fierro largo circular (antena), dado un viento fuerte y la rotación interna del disco, podría generarse un movimiento de precesión con dirección perpendicular al viento y a la antena, y con sentido anti-horario al aumentar el viento y con sentido horario al disminuir el viento, con la capacidad de a largo plazo de destruir la antena. Los tensores no evitan este perjudicial efecto.
- Si te tiran un cascote al techo de tu casa, este puede accidentalmente golpear al disco.
- Corren el riesgo de que un pájaro tenga movimientos intestinales justo sobre el disco, incrementando en gran medida el proceso de oxidación del mismo. Este riesgo puede apaliarse no dejando al disco a la intemperie.
- A mayores alturas se incrementa en gran medida la probabilidad de que el disco choque con uno o varios aviones.
- Porque sufren daños severos con las tormentas solares.
- La probabilidad de que un tiro al aire caiga sobre el disco se incrementa en el orden de 3.4x10^27 respecto al mismo disco dentro de un submarino a 30 metros de profundidad.
- Al encontrarse a mayor altura, el disco puede llegar a descentrarse, debido principalmente al incremento en la variación a lo largo del día de la fuerza gravitacional ejercida por la luna.
- El karma se ve incrementado en gran medida por encontrarse sobre el techo.
- Porque al poner un disco duro en el techo se produce un aumento en la contaminación sonora.
- La interferencia electromagnética generada por los discos duros en los techos pueden producir cáncer en las personas que caminan tranquilamente por la vereda, siendo esta además una obvia razón por la cual no es conveniente tomar sol cerca de los discos duros.
- Si son las 2 de la mañana de un martes lluvioso, y le aparece un primo que usted no conocía, ya que este vivía en Pakistán, y este le pide que le muestre como es un disco duro, usted tendrá que subir al techo con un destornillador y un paraguas, lo que sería muy incómodo.
Si conoce alguna razón adicional por la cual no sea conveniente colocar discos duros en el techo, por favor, agregue su razón a la lista o envíemela por correo electrónico.
¿Cómo funcionan las disqueteras?
En un principio y para poder lograr el objetivo es necesario conocer a fondo el funcionamiento de uno de estos aparatos, y conocer entre otras cosas el significado de cada uno de sus conectores hacia la controladora de disquetes y del algoritmo que se usa para almacenar información en el disquete, el cual dependiendo del tipo del disquete este puede ser FM o MFM, los cuales pasaré a explicar a continuación.
Aquí va el significado de cada una de las patas del conector.
1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 y 33) Son tierra (0v)
2) Este es el pin que usa la controladora para indicarle a la disquetera si el disco a leer tiene alta o baja densidad.
4) Por el momento no tengo idea de cual es el objetivo de este pin. Por lo pronto parece no ser usado por algunas motherboards inclusive, así que no debería tener ninguna relevancia a los efectos.
6) Ídem al 4.
8) Tras tratar de intentar averiguar en númerosos sitios el significado del pin me encontré con la realidad de que no existe tal explicación, y aún buscando información de los chips mi controladora alcanzados por este pin no pude encontrar información relevante.
10) Este pin pone el valor 0 lógico cuando se debería comenzar a girar el motor principal de la disquetera. Es importante que el PIC se conecte a este pin.
12) Solo se aplica a la segunda disquetera (/dev/fd1) por lo que no tiene mucho sentido emularla, tomando en cuenta el hecho de que las patas de un PIC son finitas y siempre terminan resultando insuficientes.
14) El emulador debería actuar solamente al encontrar un 0 en este pin, debido a que la controladora coloca un 1 lógico en este pin para seleccionar la segunda disquetera y un 0 para elegir la primera.
16) Ídem al 12.
Como dato adicional, yo tengo actualmente una controladora de disquetes ISA (la cual, aclaro, soporta disquetes de 3?), solo tiene conectado los siguientes pines: 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, y la tierra como la unión de todos los pines impares.
Aquí hay un proyecto de como emularon una disquetera de Commodore (la cual, tengo que aclarar que usa una interfaz serial): Emulador de disquetera de Commodore. Para que muchos incrédulos empiecen a ver que estas cosas se pueden realizar cuando hay ganas.
Recién encontré el datasheet de un controlador de disquetera, el cual explica detalladamente el significado de cada pin, el protocolo que se usa para comunicarse con la disquetera, etc: datasheet del FDC 37c699. Probablemente dentro de un tiempo resuma la información de este documento al wiki y me ponga a realizar pruebas con el puerto paralelo, software en tiempo real y algunas disqueteras que tengo, para ver a mano si puedo examinar el protocolo detalladamente.
Otro datasheet más: datasheet del Controlador 8277AA de Intel.
RAM - Enfrentando la realidad.
El proceso de emular una disquetera es un proceso de tiempo real, en el cual se necesita que haya un hardware dedicado a entregar una cantidad de datos de forma continua, con velocidad constante y con temporización exacta.
Una posibilidad podría ser agregarle una gran memoria RAM al PIC, capás de mantener el disco entero en memoria, o aún una pista. Aunque para minimizar los tiempos de acceso a la RAM es necesario accederla con un bus de datos grande (pero no demasiado).
Ahora bien, el ancho del bus de direcciones es dependiente no solo del tamaño en bytes de la pista del disco, también lo es del ancho del bus de datos entre la RAM y el PIC.
El disquete más pequeño emulable y al mismo tiempo compatible es el disquete de 5.25 pulgadas DS/DD, de 360Kb, o 500Kb sin formatear, el cual tiene 9 sectores por pista y 40 cilindros, que es en particular el tipo de disquetes más lento, y debido a que el PIC tiene una velocidad muy limitada, es conveniente tratar de emular este tipo.
RAM - Tiempos a respetar.
Según datos especificados en las datasheets, en el tipo de disquetera antes mencionado hay que lograr una salida de 250Kbps, o visto de otra forma, hay que enviar un bit cada 4us = 4×10-6 segundos. Y teniendo un PIC de 1 MIPS, 1us por instrucción, hay que enviar un bit cada exactamente 4 ciclos… Lamentablemente en el PIC propuesto, ya la instrucción del salto del loop implica 2 ciclos, quedando libre para la entrada y la salida un saldo de 2 ciclos.
Recordando que un disquete de 360Kb sin formatear ocupa 500Kb, y considerando que tiene 40 cilindros y dos lados, queda entonces 6.25Kb por pista = 51200 bits. Y teniendo que una disquetera gira a 300RPM, o sea 5 revoluciones por segundo, hay que entregar 256000Kbit por segundo, lo cual es coherente al dato antes mencionado.
Una alternativa puede ser clockear al PIC a 20Mhz en lugar de los 4Mhz que viene con el clock por defecto, logrando así 5 MIPS, y que una instrucción demore tan solo 200ns, permitiendo que se ejecute hasta 20 instrucciones en 4us, siendo 4us el tiempo que hay que respetar para enviar cada bit.
Para alcanzar estas velocidades se está obligado a incrementar el ancho del bus de datos y de direcciones con la memoria RAM, sin olvidarse que el PIC propuesto solo tiene 16 puertos.
Y hay que tomar en cuenta otro detalle más; el tiempo que se tarda en realizar el proceso de lectura de la memoria RAM. Para reducir los tiempos de lectura a la memoria por microcontroladores es conveniente usar RAM Estática (SRAM) debido a que no se tiene que refrescar. A continuación menciono unos ejemplos de DRAM para poder contrastar:
Un ejemplo de una memoria RAM es La memoria M41256-15 de OKI, la cual según el datasheet tiene un tiempo máximo de acceso aleatorio dentro de la fila de 150ns, y demorando un mínimo de 260ns por ciclo de lectura o escritura aleatoria. También soporta acceso de página a 140ns por bit. Usar esta memoria complicaría mucho el diseño del circuito, por lo que usar esta DRAM económica podría terminar siendo una decisión costosa.
Otro ejemplo de DRAM es el HYB514256BJ-70 de Siemens, La cual consta de 256K × 4bits, y tiene tiempos de acceso mucho menores, 70ns para el acceso y 130ns mínimos para un ciclo de lectura o escritura aleatoria, con la opción de lectura por páginas a 45ns por nibble. Y aunque en esta memoria hay una ganancia en rendimiento la granularidad de la velocidad del PIC hace que respecto al chip de DRAM antes mencionado no haya grandes mejoras de velocidad. El handshaking para la lectura y escritura es practicamente el mismo.
Un problema adicional ya mencionado que aparece al agregar memoria DRAM externa al PIC es el tema de que la memoria DRAM tiene que ser refrescada. Una muy buena descripción de algunos modos de refresco están explicadas en este documento. Y aunque se podría hacer agregar un controlador de memoria, la complejidad del diseño aumentaría demasiado.
Otro tipo de memoria que se puede utilizar es la memoria SRAM, la cual a diferencia de la DRAM que está hecha con un condensador y un transistor por bit, la SRAM tiene 6 transistores por bit, un par para acceder al bit y otros cuatro para almacenarlo.
Para pequeñas cantidades de memoria (como es el caso del emulador de disquetera) los precios de la SRAM son menores que los de la DRAM, además se obtiene mayor velocidad por no tener que refrescarla, por tener un handshaking más sencillo y por tener tiempos de ciclo menores.
Por un tema de sencillez de diseño sería bueno no utilizar SRAM Sincrónica.
Un ejemplo de SRAM: La CY62128VLL-70ZAI de Cypress, es una memoria de 128K × 8bits, que se puede encontrar dentro de un celular TDMA Mitsubishi T-200. El datasheet habla por si solo, y vi en internet que el precio anda por los 3.72 dólares. El problema que tengo es que mi ejemplar de esta memoria está empaquetado en reversed TSOP I y es complicada de dessoldar… Ayuda!!!
Otro tema que se aplica a la SRAM es que el número de pines necesarios para poder direccionar 51200 bits más por lo menos un pin de bus de datos, es mayor que el número de entradas/salidas del PIC, en otras palabras, es inviable la SRAM para usarla con este PIC, a menos que se use un multiplexer del bus de direcciones, que es lo que tiene la DRAM. Dicho de otra forma, la ram dinámica divide el bus de direcciones en dos partes; en Filas y en Columnas, y coloca los bits en forma de matriz cuadrada de dos dimensiones de forma similar a la memoria de matriz de núcleo. Sin embargo si se usa este diseño se complica el handshaking y se disminuye la velocidad de acceso dado que el PIC tiene que realizar más instrucciones para lograr el ciclo de lectura/escritura.
Cuando encuentre otros ejemplos de SRAM los voy a subir, estudiar y comparar.
Probablemente continúe con la sección dentro de unos días.
Aclaro que este proyecto no está muerto. Simplemente le estoy dando mayor prioridad a avanzar en otros proyectos como el omr.
