Señales que graba físicamente un microdrive

Subforo oficial del Sinclair QL: realiza aquí las consultas relativas a tu QL.

Moderador: Sir Cilve Sinclair

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Señales que graba físicamente un microdrive

Mensaje por mcleod_ideafix » Mié Ene 19, 2011 6:48 am

Viene del hilo de "Regenerando cartuchos microdrive". Lo he puesto en un hilo distinto por aquello de que esta información puede ser útil para otras cosas, además de... enriquecer la culturilla técnica sobre este peculiar periférico. Me he encontrado con alguna que otra sorpresa.

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.

Imagen

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.

Imagen

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:

Imagen

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.

Imagen

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.

Imagen

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:

Imagen

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.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Señales que graba físicamente un microdrive

Mensaje por na_th_an » Mié Ene 19, 2011 12:24 pm

Muy interesante. Gracias.

jzx
Nonamed
Mensajes: 1047
Registrado: Lun Feb 08, 2010 8:19 pm

Re: Señales que graba físicamente un microdrive

Mensaje por jzx » Jue Ene 20, 2011 8:08 am

mcleod_ideafix escribió:redundancia de datos en las dos pistas del microdrive

¿redundancia de datos y Sinclair :shock: :shock: :shock: ?

La verdad es que no está nada claro lo que hacía con las dos pistas, (tampoco es algo que haya mirado mucho, ya que no tengo ningún microdrive, eran muy caros, sobre todo los cartuchos :( ), en varios sitios había leido lo de los bytes o bits intercalados, aunque también he leido que funcionan como una sola pista, que cada vez que daba una vuelta entera cambiaba la cabeza, como los cartuchos de 8 pistas, formando una pista con doble longitud que la cinta (¿se podía referir a esto lo de la cinta de Moebius?). En este caso, al leer la cinta sí aparecerían señales en los dos canales, aunque sin relación entre ellas, pero no deberían aparecer al grabar. ¿puedes hacer la prueba,pero con una serie de datos más larga, para ver que no sea alguna coincidencia al ser solo tres bytes, y pinchando en la cabeza directamente?

Supongo que ya lo conocerás, pero por si acaso mira esto que encontré una vez http://ciberia.ya.com/rulo_sinclairql/s ... tml#s4d-f1, por si sirve para algo

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Señales que graba físicamente un microdrive

Mensaje por mcleod_ideafix » Jue Ene 20, 2011 5:19 pm

jzx escribió:...En este caso, al leer la cinta sí aparecerían señales en los dos canales, aunque sin relación entre ellas, pero no deberían aparecer al grabar. ¿puedes hacer la prueba,pero con una serie de datos más larga, para ver que no sea alguna coincidencia al ser solo tres bytes, y pinchando en la cabeza directamente?...

La prueba que hice fue mirando las señales que se envían desde el ordenador al Microdrive, cuando éste está en modo escritura. El microdrive, de hecho, estaba sin cartucho, y es más, ni siquiera tenía el motor encendido. Las señales las leía directamente de la interface 1. La prueba que tú propones implica usar al Microdrive en modo lectura, enviando un patrón definido, y por tanto con un cartucho dentro y previamente formateado con el patrón que quiero enviar, cosa que no tengo (en buenas condiciones, se entiende).

De todas formas, estoy segurísimo de que lo que se envía por DATA_1 y DATA_2 es, en todos los casos, tal y como lo he descrito: DATA_2 lleva una versión retrasada de los datos que circulan por DATA_1. Si no fuera así, y en algún momento DATA_1 y DATA_2 no llevaran datos relacionados entre sí, ¿a cuál de las dos señales se le hace caso?

Hay otra cosa que me choca y es que me extraña que hayan elegido como "desplazamiento" un número entero de bits. Bueno, no me extraña: de esta forma se simplifica la lógica que entrelaza la información en lectura, pero se me ocurre que si hubieran usado como desplazamiento entre canales un número tal como 3.5 bits, lo que tendríamos en un canal respecto del otro sería una versión desplazada de tal forma que siempre siempre tienes un flanco, positivo o negativo, cada 6 microsegundos (para la velocidad nominal del cartucho). Eso hubiera dado como resultado una señal serie síncrona, con reloj incorporado, y la decodificación sería mucho más fiable, virtualmente independiente de la velocidad de la cinta. En la configuración actual hay momentos en los que entre un flanco y el siguiente pueden pasar 6 ó 12 microsegundos, lo que hace que la ULA del interface 1 (o el chisme correspondiente en el QL) necesite llevar una base de tiempos para medir la anchura de los pulsos y comparar con 6 o 12, y por tanto, asumir que la velocidad con la que estos ocurren es una velocidad determinada.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
decicoder
Jack The Nipper
Mensajes: 176
Registrado: Jue Jul 19, 2007 10:37 am

Re: Señales que graba físicamente un microdrive

Mensaje por decicoder » Jue Ene 20, 2011 8:50 pm

Tiene que ser Manchester diferencial:

http://www.thefullwiki.org/Differential ... r_encoding

(Y me acabo de dar cuenta que lo que yo llamo Manchester diferencial en k7zx no es tal. No me queda otra que intentar añadir el mancher diferencial autentico)

Por lo de los dos canales me había imaginado algo de lo que dice mcleod. Usar un canal para señal de reloj y otro para datos. Con eso puede obviar el posible error en la velocidad de arrastre de la cinta.

Quizá en algun momento DATA_1 y DATA2 no estén desfasadas y signifiquen algún tipo de sincronismo.
xor a
ld R,a
b1 in f,(c)
jp pe , b1
ld a,R

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Señales que graba físicamente un microdrive

Mensaje por mcleod_ideafix » Jue Ene 20, 2011 10:59 pm

decicoder escribió:Tiene que ser Manchester diferencial:

http://www.thefullwiki.org/Differential ... r_encoding


Se parece, pero no. En el Manchester siempre hay un flanco en la mitad del tiempo de bit. En el Microdrive sólo existe este flanco cuando es un 0. Cuando es un 1, la señal mantiene su valor durante todo el tiempo de bit. Esto creo que es sencillamente alguna forma de FM, o EFM.

decicoder escribió:Por lo de los dos canales me había imaginado algo de lo que dice mcleod. Usar un canal para señal de reloj y otro para datos. Con eso puede obviar el posible error en la velocidad de arrastre de la cinta.

Eso es lo que podría hacer si el retraso fuera de N bits y medio, pero no. Lástima... :\

decicoder escribió:Quizá en algun momento DATA_1 y DATA2 no estén desfasadas y signifiquen algún tipo de sincronismo.

Mmmmm..... hay de hecho una trama de sincronismo que se registra en el Microdrive para indicar el comienzo de un sector, pero me da que no, que el comportamiento siempre es así. Fíjate que el programa anterior lo que hace es enviar datos sin cesar, usando el mismo puerto de salida que el Interface 1 usa habitualmente. De todas formas, del tema de cómo sabe el ordenador dónde comienza un sector para en ese momento volcar datos nuevos, aún no puedo decir nada. Quizás espere a que termine el "gap" y entonces vuelque toda la información, o quizás haga otra cosa.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
decicoder
Jack The Nipper
Mensajes: 176
Registrado: Jue Jul 19, 2007 10:37 am

Re: Señales que graba físicamente un microdrive

Mensaje por decicoder » Vie Ene 21, 2011 5:11 pm

Si desplazas levemente los cursores se ven los flancos a mitad de ciclo:

Imagen

La sincronización podría estar en los 4 primeros bit que van adelantados. Si en el canal 1 se ve moviento de cuatro bits y en el canal 2 no hay movimento. Cuando empiece el movimiento en el canal 2 empieza el sector
xor a
ld R,a
b1 in f,(c)
jp pe , b1
ld a,R

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Señales que graba físicamente un microdrive

Mensaje por mcleod_ideafix » Vie Ene 21, 2011 10:38 pm

decicoder escribió:Si desplazas levemente los cursores se ven los flancos a mitad de ciclo:

Ostras! Sí que tienes razón! Es Manchester diferencial! Wow! Convencido que estaba de que era algún tipo de modulación EFM (porque así lo había leido en alguna parte) no se me ocurrió desplazar ese medio bit :)

Me parece que para poder "oir" lo que hay grabado en un cartucho, se podría intentar cogiendo una unidad de Microdrive, manipulando el motor para que fuese más lento, y llevando los pines del cabezal lector a un amplificador de audio. Tendríamos una versión "ralentizada" de toda la señal grabada.

Bueno, supongo que con poder grabar un par de sectores completos bastaría...
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
decicoder
Jack The Nipper
Mensajes: 176
Registrado: Jue Jul 19, 2007 10:37 am

Re: Señales que graba físicamente un microdrive

Mensaje por decicoder » Sab Ene 22, 2011 9:05 am

Se me ocurre otra idea.

Pillar un microdrive que se haya dado por muerto (mecanicamente ) pero que sepamos que tiene algo grabado.

Sacar la cinta y enrollarla en una cassete de audio normal.

Como el motor del cassette avanza 16 veces más lento las frecuencias de 83 kHz quedan en 5 kHZ, que las puede manejar el sistema de audio.

Grabar el audio en un fichero .wav y analizar.

Problema: Ajustar el azimut. Imagino que el microdrive llevará las dos pistas stereo justo por el centro de la cinta. En cambio los sitemas de audio tiene doble cara.
xor a
ld R,a
b1 in f,(c)
jp pe , b1
ld a,R

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Señales que graba físicamente un microdrive

Mensaje por mcleod_ideafix » Sab Ene 22, 2011 2:09 pm

decicoder escribió:Sacar la cinta y enrollarla en una cassete de audio normal.
Problema: Ajustar el azimut. Imagino que el microdrive llevará las dos pistas stereo justo por el centro de la cinta. En cambio los sitemas de audio tiene doble cara.


Hay otro problema: la cinta del microdrive es la mitad de ancha (o quizás menos) que una cinta de audio, por lo que estará "bailando" en los rodillos internos de tracción de un lado a otro, no se bobinará bien al hacer el play por la misma razón, y a los pocos segundos seguramente obtendremos una cinta completamente atascada :(
Web: ZX Projects | Twitter: @zxprojects

zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Señales que graba físicamente un microdrive

Mensaje por zx81 » Mié Jun 15, 2011 2:48 pm

decicoder escribió:Tiene que ser Manchester diferencial:

http://www.thefullwiki.org/Differential ... r_encoding

(Y me acabo de dar cuenta que lo que yo llamo Manchester diferencial en k7zx no es tal. No me queda otra que intentar añadir el mancher diferencial autentico)

Por lo de los dos canales me había imaginado algo de lo que dice mcleod. Usar un canal para señal de reloj y otro para datos. Con eso puede obviar el posible error en la velocidad de arrastre de la cinta.

Quizá en algun momento DATA_1 y DATA2 no estén desfasadas y signifiquen algún tipo de sincronismo.


La frase que resalto en negrita me ha llamado la atención porque puedo especular en una dirección parecida. Leyendo el puerto 0xef hay dos bits interesantes, los bits 1 (SYNC) y 2 (GAP). Especulo con la posibilidad de que la señal que va "delante" sea retrasada en la ULA y que cuando las señales enviadas/recibidas en DATA_1 y DATA_2 coinciden, entonces se active el bit de SYNC. La idea tiene dos problemas:

  • No es necesaria realmente porque el Manchester Diferencial ya incorpora el reloj.
  • Si se joroba la lectura de uno de los canales también pierdes el otro al no activarse nunca la señal de SYNC. Doble posibilidad de fallo, mitad de fiabilidad.

Tal y como está documentado, un sector del MDRV se compone de:

[GAP] [PREAMBLE] [SECTOR HEADER] [GAP] [PREAMBLE] [DATA BLOCK]...[GAP] [PREAMBLE] [SECTOR HEADER]...

El sector completo tiene 543 bytes sin contar los preámbulos en lectura, aunque siempre se envían en escritura.
El GAP es indeterminado (relativamente) y se genera durante el formateo que, como todo lo de SRL, es muy ingenioso. El preámbulo son 10 bytes a 0x00 y 2 bytes a 0xFF. Debe ser con ese preámbulo con el que se consigue la señal SYNC que, imagino, se mantiene activa hasta el siguiente GAP (¿alguien con un osciloscopio y mucho tiempo y paciencia?). O sea, las señales GAP y SYNC son alternantes y contrarias, salvo que no haya una cinta insertada (las dos a 1) o que haya una cinta sin formatear (¿señal GAP siempre a 0 en este caso?). La cabecera de sector tiene 15 bytes y el bloque de datos 528. Está todo documentado, vaya.

El controlador es muy sencillo lo que, paradójicamente, complica la emulación. Tanto es así que deduzco que todas las emulaciones que hay se basan en cómo trabaja la ROM del IF1 con el MDRV. Invéntese usted un formato nuevo, con bloque de datos de 1K en lugar de 512 bytes, y dejarán de funcionar todos los emuladores (el Fuse seguro que no funciona). En teoría podría jugarse con el formato para intentar ganar capacidad, como hacía en su día el 2M de Ciríaco García de Celis con los disquetes de 3,5", pero lo que funcionaría en el aparato físico, no lo haría en un emulador. Seguro.

Durante el formateo se envían a la cinta 254 bloques, numerados del 254 al 1, por orden decreciente de número de sector. Cada sector se envía generando el GAP a base de activar la señal ERASE (activa a nivel 0) y más tarde la señal R/W (también activa a nivel 0). A continuación se envían el preámbulo (12 bytes), la cabecera de sector (15 bytes) y 3 bytes extras que debe usar como se usa el GAP3 en el FDC-765 del +3. Luego vuelve a desactivar la señal R/W y deja solo la señal ERASE para generar el siguiente GAP, activa de nuevo R/W y envía 27 bytes de preámbulo + cabecera de sector, 512 bytes con valor 0xFC y 102 bytes más a 0xFC que servirán de nuevo como GAP3.

Naturalmente, llega un momento en que los sectores empiezan a chafarse porque la cinta se da la vuelta, pero al final quedan una serie de sectores numerados del 1 al máximo que haya sobrevivido al formateo. Un sector se usa para almacenar el bitmap de sectores donde se marcan los inutilizables, en este caso por errores, pero también se van poniendo a 1 para indicar sector ocupado conforme se va grabando en el cartucho.

Una vez que se ha escrito toda la cinta, comienza la búsqueda de sectores erróneos. Se hace buscando el SYNC y leyendo 16 bytes de cabecera, comprobando que se lee el valor 0xFC en cada uno de los bytes, buscando el siguiente SYNC y leyendo el bloque de datos y 100 bytes extras comprobando también que siguen teniendo el valor 0xFC. Un valor distinto de éste hace que ese sector se de por no utilizable.

Para finalizar se graba el sector de bitmap e información "contable" de la cinta.

En las lecturas siempre se lee lo que se pide, sin llegar a ver el preámbulo nunca. En las escrituras normales, se graba el preámbulo y el bloque de datos, ya que la cabecera de sector solo se sobreescribe durante el formateo.
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Señales que graba físicamente un microdrive

Mensaje por mcleod_ideafix » Mié Jun 15, 2011 10:14 pm

zx81 escribió:(¿alguien con un osciloscopio y mucho tiempo y paciencia?)

Añade: "... y con un cartucho de Microdrive en perfecto estado", ya que de las tres cosas, creo que es la más difícil de conseguir :D

Por lo demás, es muy interesante esto que comentas. ¿Es posible verificarlo de alguna forma sin necesidad de recurrir a un cartucho de Microdrive? La prueba que hice en su día sencillamente miraba cómo se escribe en DATA_1 y DATA_2, es decir, escrituras al más bajo nivel posible. La operación de formateo, o de escritura de un sector, es mucho más compleja e incluye leer primero ciertas cosas, y después pasar a escribir. No pude ver con el osciloscopio cómo se comienza a escribir un sector, o cómo se comienza a leer, sencillamente por eso, porque no tengo un cartucho de Microdrive que leer o escribir.

Pero igual averiguas algo si depuras paso a paso la shadow ROM en un emulador que sí soporte Microdrive, como el Spectaculator.
Web: ZX Projects | Twitter: @zxprojects

zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Señales que graba físicamente un microdrive

Mensaje por zx81 » Mié Jun 15, 2011 10:55 pm

mcleod_ideafix escribió:
zx81 escribió:(¿alguien con un osciloscopio y mucho tiempo y paciencia?)

Añade: "... y con un cartucho de Microdrive en perfecto estado", ya que de las tres cosas, creo que es la más difícil de conseguir :D

Por lo demás, es muy interesante esto que comentas. ¿Es posible verificarlo de alguna forma sin necesidad de recurrir a un cartucho de Microdrive? La prueba que hice en su día sencillamente miraba cómo se escribe en DATA_1 y DATA_2, es decir, escrituras al más bajo nivel posible. La operación de formateo, o de escritura de un sector, es mucho más compleja e incluye leer primero ciertas cosas, y después pasar a escribir. No pude ver con el osciloscopio cómo se comienza a escribir un sector, o cómo se comienza a leer, sencillamente por eso, porque no tengo un cartucho de Microdrive que leer o escribir.

Pero igual averiguas algo si depuras paso a paso la shadow ROM en un emulador que sí soporte Microdrive, como el Spectaculator.


Ciertamente, comprobar las señales GAP y SYNC sería una cuestión de software y para eso necesitas, sí o sí, un cartucho dispuesto a hacerle perrerías y eso no se prodiga mucho últimamente. La cosa iba más por el lado de dar ideas a los magos de la electrónica que andan por aquí para saber si lo que pienso es técnicamente posible y si tendría sentido hacerlo así. Dado que, gracias a tus pruebas, sabemos fehacientemente que de escribir los bits alternados nada, que ambas pistas llevan la misma información retrasada, he dado vueltas a como podría funcionar en la ULA del IF1 esa señal y se me ocurre que retrasando la señal que va adelantada, haciendo un XOR de las dos señales y negando la salida, podríamos tener una señal SYNC muy apañada. Y la salida sin la etapa de negado final serviría como GAP (todo lo que no sea unas señales en sincronía es un GAP).

Y el método de, al formatear, activar ERASE y, algo más tarde, activar el R/W parece indicar que ese es el método empleado para generar el GAP. Gracias a eso es posible emular el IF1, porque si no, xungo estaría el tema. Aún así, como ya he dicho antes, no intentes inventar nada para los emuladores porque no funcionaría. Es más, Fuse ni siquiera se preocupa de qué pasa con las señales ERASE y R/W y, de hecho, se podría programar código para él que vaya usted a saber qué haría en el HW real (¿qué pasa si activas la señal de escritura y lees del puerto?. ¿Y lo contrario? [te cargas lo que haya en el cartucho, eso seguro porque la señal de escritura no perdona]).

Hay que tener en cuenta que el MDRV tiene un método muy primitivo de grabar las señales, sin un controlador complejo a-la-FDC del +3. No hay comandos, ni nada que se le parezca. Un ejemplo: en el FDC-765 dentro de la serie de bytes que forman un comando hay uno que especifica el tamaño del GAP3 para cada sector. Evidentemente, se especifica más largo en el formateo y más corto en las lecturas/escrituras. Pero tú solo especificas el tamaño del GAP3, él lo trata y tú nunca lo lees directamente ni lo escribes. La ROM del IF1 escribe, por ejemplo, 30 bytes de cabecera, comprueba 29 y luego solo lee 15 (los 12 bytes de preámbulo tampoco los ves en lectura aunque estás obligado a enviarlos cada vez que grabas).

La señal GAP solo la usa de dos maneras, al menos que yo haya visto en el desensamblado. Una comprueba la alternancia del bit nada más poner el motor en marcha, supongo que para saber si hay una cinta legible pegando vueltas dentro de la unidad (y si no está formateada lo más que sabe decirte la ROM es Microdrive not present, exactamente lo mismo que cuando no hay cinta en la unidad). La otra es para saber cuando está a cero, para esperar después la señal SYNC y realizar la transferencia subsiguiente de lectura o escritura. Mi teoría es que esas señales se alternan, pero FUSE las trata como una sola y funciona tan ricamente...

En fin, disculpa por el tocho, pero técnicamente me parece un tema interesante y nada estudiado (ni mucho menos documentado).
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator

zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Señales que graba físicamente un microdrive

Mensaje por zx81 » Vie Jun 17, 2011 8:17 am

Ale!, ya he encontrado un programa que se inventa su propio formato para el cartucho de MDRV, el Multiface 128. En la documentación dice que se puede formatear el cartucho de una forma más eficiente para que tenga +100K de capacidad.

Solo hay que entrar en el menu del MF128, ir a Save, poner el nombre, escoger Microdrive y darle a la 'f' de Format. El resultado es I/O Error 10.

A ver si mcleod_ideafix tiene un ratillo y puede probar si funciona en el Spectaculator. Es curiosidad malsana... :twisted:
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Señales que graba físicamente un microdrive

Mensaje por mcleod_ideafix » Vie Jun 17, 2011 1:10 pm

zx81 escribió:A ver si mcleod_ideafix tiene un ratillo y puede probar si funciona en el Spectaculator. Es curiosidad malsana... :twisted:


Pues no me da ningún error. Mientras formatea el borde conmuta entre blanco y negro, se escucha el ruido del motor del microdrive, y al final vuelve al menú. Le he dado a SAVE para grabar un snapshot del ordenador y lo ha hecho. El MDR resultante ocupa 137923 bytes. Un CAT 1 de ese cartucho muestra cuatro ficheros (cargador y tres bloques de C/M) y 122KB libres.
Web: ZX Projects | Twitter: @zxprojects

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 13 invitados