Tarjeta de memoria para DivIDE

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
Sinclair
MSX Turbo R
MSX Turbo R
Mensajes: 323
Registrado: 19 Jun 2013, 00:00
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Sony PlayStation 1
Gracias dadas: 8 veces
Gracias recibidas: 1 vez

Re: Tarjeta de memoria para DivIDE

Mensajepor Sinclair » 04 Oct 2013, 19:06

mcleod_ideafix escribió:
Sinclair escribió:El electrolitico (10uF) va de +5V a masa y el cerámico(104) del pin 7 al 14 (vcc y grd) del integrado.

O sea, que ambos son condensadores de desacoplo para la alimentación. El de 10uF podría estar alterando la lectura del ohmetro, pero de cualquier forma, pon la resistencia y así aseguraremos de que la señal de RESET se reciba limpia y cuando no esté, haya 5V en el pin 1.

Ponla y prueba el invento de nuevo. Si no detecta la tarjeta, haz lo del reseteo manual. Si tampoco la detecta después, mide la tensión en el pin 1 (con el equipo encendido aunque no la haya detectado por segunda vez). ¿Qué tensión tienes en ese pin?


- He soldado la resistencia de 10k entre +5v y el pin 1 del IDE y no detecta la CF (bueno, esto en realidad ya lo había probando antes aunque con las pinzas y sin soldar)
- Después he reseteado puenteando el pin 1 del IDE con masa y el ordenador muestra dos lineas en pantalla y se bloquea.
- El voltaje que tiene el pin 1 del IDE con el equipo encendido es de 4,9V

Salu2.
© 1982 Sinclair Research Ltd

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Tarjeta de memoria para DivIDE

Mensajepor mcleod_ideafix » 04 Oct 2013, 19:11

Sinclair escribió:- Después he reseteado puenteando el pin 1 del IDE con masa y el ordenador muestra dos lineas en pantalla y se bloquea.

Pues esto sí que es raro, porque el reset de la tarjeta está aislado del reset del ordenador mediante el transistor. El Spectrum no debería ni inmutarse cuando se reseteara la tarjeta. Prueba con mantener el cortocircuito en el pin 1 con masa durante más tiempo, pongamos, 1 segundo. Igual es que la salida de la condición de reset es la que ha bloqueado al Spectrum. Aun así, es que ya te digo, no debería ni inmutarse.

Sinclair escribió:- El voltaje que tiene el pin 1 del IDE con el equipo encendido es de 4,9V
Salu2.

Sí, ese voltaje es el correcto.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
Sinclair
MSX Turbo R
MSX Turbo R
Mensajes: 323
Registrado: 19 Jun 2013, 00:00
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Sony PlayStation 1
Gracias dadas: 8 veces
Gracias recibidas: 1 vez

Re: Tarjeta de memoria para DivIDE

Mensajepor Sinclair » 04 Oct 2013, 19:13

He desoldado una pata del electrolítico y ahora parece que no se bloquea al forzar el reset, aunque sigue sin detectar la CF.

-- Actualizado 04 Oct 2013, 19:18 --

El condensador por tanto se lo he quitado definitivamente porque creo que tampoco solucionaba nada y debía desacoplar bien poco porque el interface funciona igual.
© 1982 Sinclair Research Ltd

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Tarjeta de memoria para DivIDE

Mensajepor mcleod_ideafix » 04 Oct 2013, 19:46

Llegados a este punto sólo queda escribir código que compruebe si los registros ATA están disponibles en la interface, y si es el caso, ver si cuando se envía un comando se recibe respuesta y ese tipo de cosas.

Para empezar, vamos a ver si existe el registro de estado y ver qué valor tiene. Arranca el Spectrum, a ser posible en modo 48K, y teclea:
PAUSE 1: PRINT IN 65519

Si te da un valor distinto de 255, vamos bien. ¿Qué valor te da? (prueba con la CF y con el disco duro que sabes que sí es detectado)

EDITO: si los problemas son de reset, veo que es que hay dispositivos que necesitan un "reset software", y eso consiste en poner a 1 el bit SRST durante un momento, y luego ponerlo a 0 de nuevo. Eso, según leo, sirve para resetear dispositivos que no responden al bus. Este bit es el bit 2 del registro alternativo de control y estado, que en el PC está en el puerto 3F6h. Para acceder a ese puerto en la CF y en un disco duro se hace con A2=1, A1=1, A0=0, CS0=1, CS1=0.

Lo malo es que tanto el DivIDE como la interfaz simple de 8 bits implementan el control por CS0, pero no implementan el poder controlar CS1, y lo dejan puesto siempre a 1, por lo que sólamente se pueden usar los registros "normales" a los que se accede cuando CS1=1, CS0=0, así que este comando de soft-reset, que quizás necesite tu CF, no puede enviarse desde el Spectrum.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
Sinclair
MSX Turbo R
MSX Turbo R
Mensajes: 323
Registrado: 19 Jun 2013, 00:00
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Sony PlayStation 1
Gracias dadas: 8 veces
Gracias recibidas: 1 vez

Re: Tarjeta de memoria para DivIDE

Mensajepor Sinclair » 05 Oct 2013, 07:20

mcleod_ideafix escribió:Llegados a este punto sólo queda escribir código que compruebe si los registros ATA están disponibles en la interface, y si es el caso, ver si cuando se envía un comando se recibe respuesta y ese tipo de cosas.

Para empezar, vamos a ver si existe el registro de estado y ver qué valor tiene. Arranca el Spectrum, a ser posible en modo 48K, y teclea:
PAUSE 1: PRINT IN 65519

Si te da un valor distinto de 255, vamos bien. ¿Qué valor te da? (prueba con la CF y con el disco duro que sabes que sí es detectado)

Da 80 en los dos casos.

mcleod_ideafix escribió:EDITO: si los problemas son de reset, veo que es que hay dispositivos que necesitan un "reset software", y eso consiste en poner a 1 el bit SRST durante un momento, y luego ponerlo a 0 de nuevo. Eso, según leo, sirve para resetear dispositivos que no responden al bus. Este bit es el bit 2 del registro alternativo de control y estado, que en el PC está en el puerto 3F6h. Para acceder a ese puerto en la CF y en un disco duro se hace con A2=1, A1=1, A0=0, CS0=1, CS1=0.

Lo malo es que tanto el DivIDE como la interfaz simple de 8 bits implementan el control por CS0, pero no implementan el poder controlar CS1, y lo dejan puesto siempre a 1, por lo que sólamente se pueden usar los registros "normales" a los que se accede cuando CS1=1, CS0=0, así que este comando de soft-reset, que quizás necesite tu CF, no puede enviarse desde el Spectrum.

Entiendo que al no ser posible hacer un "soft reset" este método quedaría descartado.

Salu2.
© 1982 Sinclair Research Ltd

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Tarjeta de memoria para DivIDE

Mensajepor mcleod_ideafix » 05 Oct 2013, 13:50

Sinclair escribió:Si te da un valor distinto de 255, vamos bien. ¿Qué valor te da? (prueba con la CF y con el disco duro que sabes que sí es detectado)

Da 80 en los dos casos.[/quote]
Eso está bien. 80 significa que el dispositivo está listo, y que se ha completado el último comando SEEK (esto es irrelevante de momento).

Mientras escribo un programa más elaborado, he encontrado esto:

All pins are TTL compatible, control signals are active low. (Note about using Compact Flash cards in “True ATA mode” via IDE adapters: According to the spec sheet, these cards require CMOS level logic inputs – so when running with Vcc at 5 volts, logic highs should be a minimum of 4v. This wont be an issue using 74HC series logic from a 5 volt system such the Z80 but its worth bearing in mind if mixing logic families etc.)


Lo que viene a decir que el "uno" lógico de una CF debe estar por encima de 4V, y eso es algo que con el Z80 se consigue a duras penas. De hecho, estoy pensando que con los transistores en modo seguidor de emisor la cosa se complica aún más porque estos chismes se comen 0,6V de la tensión de entrada, por lo que si a la entrada ya era baja, a la salida lo es un poco más, empeorando el panorama.

Una forma rápida de bajar los niveles de tensión requeridos por la CF es alimentarla a 3,3V . Eso bajará los requerimientos de "uno" a unos 2,5V más o menos.

Más cosas que he leído:

DMACK is an input at the drive used to acknowledge DMA mode – I noted that the Compact Flash ATA mode spec sheets say if there is no DMA-mode ability in the host (as there wouldn’t be for a simple interface) DMACK should be driven high.

Está claro, ¿no? La señal DMACK en una CF debe estar puesta con un pullup de 10K a la tensión de alimentación de la CF. Eso es algo que está hecho en el DivIDE, pero no en la interfaz simple de 8 bits, y que creo que es muy conveniente hacer.

-- Actualizado 05 Oct 2013, 15:31 --

Mira. Te he escrito una pequeña utilidad para comprobar si al menos la interfaz de 8 bits es capaz de leer un sector de la CF, concretamente el primer sector, donde debe encontrarse la tabla de particiones IDEDOS. Cárgalo con los medios convencionales (desde el modo 48K a ser posible) y ejecútalo, y dime qué aparece en pantalla:
http://www.atc.us.es/~rodriguj/test8bitsimple.tap
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
Sinclair
MSX Turbo R
MSX Turbo R
Mensajes: 323
Registrado: 19 Jun 2013, 00:00
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Sony PlayStation 1
Gracias dadas: 8 veces
Gracias recibidas: 1 vez

Re: Tarjeta de memoria para DivIDE

Mensajepor Sinclair » 05 Oct 2013, 16:39

mcleod_ideafix escribió:
DMACK is an input at the drive used to acknowledge DMA mode – I noted that the Compact Flash ATA mode spec sheets say if there is no DMA-mode ability in the host (as there wouldn’t be for a simple interface) DMACK should be driven high.

Está claro, ¿no? La señal DMACK en una CF debe estar puesta con un pullup de 10K a la tensión de alimentación de la CF. Eso es algo que está hecho en el DivIDE, pero no en la interfaz simple de 8 bits, y que creo que es muy conveniente hacer.


No me tengo muy claro con que pines se correspondería esta señal.

mcleod_ideafix escribió:
Mira. Te he escrito una pequeña utilidad para comprobar si al menos la interfaz de 8 bits es capaz de leer un sector de la CF, concretamente el primer sector, donde debe encontrarse la tabla de particiones IDEDOS. Cárgalo con los medios convencionales (desde el modo 48K a ser posible) y ejecútalo, y dime qué aparece en pantalla:
http://www.atc.us.es/~rodriguj/test8bitsimple.tap



La primera imagen es con el DD y la segunda con la CF

Imagen

Imagen

Salu2.
© 1982 Sinclair Research Ltd

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Tarjeta de memoria para DivIDE

Mensajepor mcleod_ideafix » 05 Oct 2013, 16:50

Sinclair escribió:No me tengo muy claro con que pines se correspondería esta señal.

Mira cualquier diagrama de pinout del conector IDE y lo verás (si es que tengo que darlo todo mascadito :P ).
Imagen

Imagen
Mmmmm.... por lo que parece, no hay errores y la tarjeta acepta bien los comandos, pero lo que lee no es lo que debería aparecer en una CF formateada con IDEDOS.

1. Pincha la tarjeta CF en un lector CF en tu PC y usando algún editor hexadecimal, como por ejemplo HxD, que permita leer en modo RAW el contenido de la CF, mira a ver qué hay en el sector 0 de la CF. Si está todo a 0, y no ves nada que se parezca a lo de IDEDOS (deberías ver la palabra IDEDOS separada por valores puestos a 00h o FFh al principio del sector 0) entonces es que esa CF no ha sido formateada para IDEDOS.

2. Si lo que ves con el editor hexadecimal tiene pinta de ser correcto, haz el pullup del pin 29 a +5V con la resistencia y vuelve a probar el programita.

-- Actualizado 05 Oct 2013, 16:54 --

Ah! Otra cosa que se me olvidaba. Por mi experiencia, chismes como el DivIDE o esta interfaz de 8 bits suelen dar más problemas en el +2A/B/3 que en los 48K simples, ya que los primeros cargan aún más las líneas de dirección. Si te es posible, ¿podrías hacer estas pruebas que estamos haciendo usando un Spectrum 48K corriente y moliente? Como el programita accede a bajo nivel a la tarjeta, da igual que tengas o no soporte en la ROM para ella, ya que no la usamos para nada.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
Sinclair
MSX Turbo R
MSX Turbo R
Mensajes: 323
Registrado: 19 Jun 2013, 00:00
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Sony PlayStation 1
Gracias dadas: 8 veces
Gracias recibidas: 1 vez

Re: Tarjeta de memoria para DivIDE

Mensajepor Sinclair » 05 Oct 2013, 17:01

La CF no esta formateada en IDEDOS ya que no es posible acceder a la misma a través del interface.
Estoy intentándolo a través del emulador EightyOne, pero aunque este si detecta la tarjeta, no la formatea tampoco. El adaptador de tarjetas del PC es usb, lo mismo es por eso.

-- Actualizado 05 Oct 2013, 17:03 --

Puedo probar sin problemas en un Spectrum 48K.

-- Actualizado 05 Oct 2013, 17:16 --

Estoy ahora con un 48K.

He conseguido formatear la tarjeta con el emulador pero el programa sigue mostrando los mismo.
© 1982 Sinclair Research Ltd

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Tarjeta de memoria para DivIDE

Mensajepor mcleod_ideafix » 05 Oct 2013, 17:40

Sinclair escribió:He conseguido formatear la tarjeta con el emulador pero el programa sigue mostrando los mismo.

¿Qué te muestra el editor hexadecimal cuando accedes al sector 0 de la tarjeta desde el PC? ¿Has hecho el pullup de la línea DMACK a +5V ?
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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