No repetiré aquí lo que ya existe en las wikis: que si la cinta circula a 76 cm/s, que es una cinta de video, etc, etc. Vamos a lo que he podido medir hoy.
Este es el "setup" para esta prueba: un Spectrum 48K, su correspondiente Interface 1, y una unidad de Microdrive. La unidad de Microdrive en realidad sobraba, ya que lo que quería era obtener medidas de las señales que genera el interface 1, pero resulta que a través del conector pass-through del Microdrive tengo un mejor acceso a las señales que me interesan y no tengo que desarmar ni el Microdrive ni el Interface 1.
Lo que aquí cuento, obviamente, vale también para el QL (por eso estamos en este subforo). Uso el Spectrum porque para mi es más sencillo enviar comandos de bajo nivel a la Interface 1 que usando el QL.
Para empezar, el programa que voy a usar. Bueno, en realidad no es exactamente este: le falta un DI (código 243) al principio. Por eso si se ejecuta tal cual da un E Out of Data.
El fuente del programa es éste:
Código: Seleccionar todo
ld a,226
out (239),a ;habilitamos escritura en el Microdrive
otrasecuencia:
ld hl,49152 ;los datos a grabar están a partir de esta posición de memoria.
ld bc,03e7h ;vamos a grabar 3 bytes, y los escribiremos al puerto E7h, que es el puerto de datos del Microdrive
otir ;los escribimos
jr otrasecuencia
org 49152 ;los tres bytes a escribir en el microdrive están aquí.
db 0,255,170 ;En binario es: 00000000 11111111 10101010 . Un patrón fácilmente reconocible a simple vista :)
Basicamente, este programa escribe sin cesar al Interface 1 la secuencia 00000000 11111111 10101010 00000000 11111111 10101010 00000000 11111111 10101010 00000000 11111111 10101010 00000000 11111111 10101010 ...
Es una versión corta de la rutina OUT-M-BUF de la ROM Shadow del Interface 1. Esta rutina graba 543 bytes al Microdrive, con HL apuntando a esos datos en memoria.
Al ejecutar este programa y poner una sonda en DATA_1 esto es lo que se ve:
Estamos viendo, enmarcado entre dos cursores verticales, el byte 10101010. Antes de él se ha transmitido el 11111111 y después de él se transmite 00000000 . Esto se corresponde con los tres bytes que estamos transmitiendo sin cesar. La duración de un byte es de 96 microsegundos (en los cursores aparece 98 porque con la escala de tiempos que he usado en esa captura no tengo mucha precisión)
A diferencia de lo que ocurre en la cinta cassette, tanto los bits '1' como los bits '0' duran lo mismo. Esta es la duración de un '1': 12 microsegundos.
La mitad de un bit '0' ocupa justo la mitad de tiempo: 6 microsegundos. La única diferencia por tanto entre un '1' y un '0' es que el '0' tiene un flanco a mitad del bit, mientras que el '1' no lo tiene.
La polaridad no es importante en la grabación: hay bits '1' tanto a nivel bajo como a nivel alto. Lo que realmente mide el Interface 1 cuando lee datos son los flancos (positivos o negativos, da igual).
- Si entre un flanco y el siguiente pasan 12 microsegundos, es un '1'.
- Si entre un flanco y el siguiente pasan 6 microsegundos, es la mitad de un '0'. Hay que dejar pasar el siguiente flanco para que el tiempo de bit sean 12 microsegundos.
El tiempo de un byte es por tanto de 96 microsegundos. La velocidad de escritura de bytes desde el Interface 1 al Microdrive es de 10,1725 KB/s
No lo he comprobado con el osciloscopio, pero supongo que el Interface 1 "para" a la CPU con WAIT en cada iteración de la instrucción OTIR, para que dé tiempo a que se transmita el byte.
Ahora, algo interesante: en los manuales técnicos, wikis, etc, dice que el Microdrive graba los bytes "entrelazados" en cada una de las dos pistas que tiene el cabezal estéreo. Si pinchamos dos sondas y vemos las formas de onda, obtenemos esto:
La forma de onda superior corresponde a DATA_1, la inferior a DATA_2
Lo que observo es lo siguiente:
- La información que fluye por DATA_1 y DATA_2 es la misma: no se graban los bytes de forma multiplexada. En DATA_1 pueden verse 5 bits y medio del byte 00000000, el byte 11111111 entero, y 7 bits del byte 10101010
- La información que fluye por DATA_2 está retrasada 4 bits respecto de DATA_1, pero es la misma que en DATA_1. En DATA_2 pueden verse el byte 10101010 completo, el byte 00000000 completo, y 3 bits del byte 11111111 . El retraso entre las dos pistas está marcado por los dos cursores verticales, que están señalando el final del byte 11111111 en DATA_1 y el final del byte 00000000 en DATA_2. Dicho retraso es de 48 microsegundos, que corresponde al tiempo de 4 bits.
Así que lo que tenemos es una especie de "pipeline" de tal forma en lectura, el primer byte tardará en llegar al Interface 1 unos 96 microsegundos, pero a la mitad del primer byte, empieza a transmitirse el segundo por la otra pista, que llega 48 microsegundos más tarde, y cuando éste segundo byte va por la mitad, por la otra pista comienza a emitirse el tercero. De esta forma, con esta combinación de alternancia de pistas y redundancia de datos en las dos pistas del microdrive, tenemos que si en escritura el tiempo de un byte era de 96 microsegundos, en lectura es de 48 microsegundos, dando una velocidad máxima de lectura de 20,345 KB/s.