Propuesta de interfaz QL-IDE para puerto de cartucho ROM

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

Moderador: Sir Cilve Sinclair

Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor mcleod_ideafix el Mie Jul 21, 2010 6:23 am

Esto viene oriignalmente del hilo en el que se habla sobre la Minerva y la MKII en una única ROM.

De momento, esto es sólo una propuesta que he hecho esta noche, "a ver cómo sale". Todo el diseño se basa en la premisa (que tendría que comprobar) de que ROMOEH se activa tanto para accesos de lectura al área de la ROM como en accesos a escritura (aunque en una ROM esto no tenga sentido, claro).

Resulta una placa que mediría 64mm de ancho X 92mm de largo (incluyendo el conector de borde que se enchufa al QL). La parte que sobresale del QL son unos 74mm.

En el conector IDC40 se puede pinchar un disco duro, o bien un adaptador IDE-CF, o un adaptador IDE-SD. Dado que los primeros son unos adaptadores muy muy baratos, no merece la pena integrar el conector de CF en el diseño. Claro que esto tiene el inconveniente de que sobresale por arriba, y bueno, quizás no queda muy estético. A mi la verdad es que el tema estético me da bastante lo mismo.

Se usa el dispositivo IDE en toda su capacidad, esto es, con la interfaz de 16 bits, si bien a causa del formato usado, todas las lecturas y escrituras deberán hacerse de 8 en 8 bits.

Un LED indica cuándo hay actividad en el dispositivo que enchufemos (disco duro, CF, etc).

Una ROM de 16K contendrá el firmware. De estos 16K, los últimos bytes (de momento, los últimos 16, es decir, el rango FFF0-FFFF) no direcciona realmente la ROM sino la interfaz IDE. Como no tenemos señal de escritura, el truco (que también se usa en los dispositivos que se implementan en forma de cartucho ROM del Inteface II) consiste en reservar un rango de direcciones para acceder al dispositivo en lectura, y otro rango distinto para acceder a él en escritura. Así, el registro de datos estaría en la posición FFF0, y si queremos leer un byte de él, leeríamos esa dirección, pero si queremos escribir un byte a ese registro, no escribiremos en esa dirección sino que lo haremos en FFF8.

Dicho de otra forma: la línea de dirección A3 hace el papel de señal de lectura/escritura: si A3 vale 0, estamos leyendo. Si vale 1, estamos escribiendo. Pero este rol sólo es válido si el rango que se direcciona es el resrvado para la interfaz IDE.

Esquemático (muy muy simple, y por tanto, sujeto a múltiples errores) :)
Imagen

PCB:
Imagen

Disposición de los componentes en la placa:
Imagen
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor radastan el Mie Jul 21, 2010 4:24 pm

Mi mujer salió de cuentas ayer... espero ser re-padre de un momento a otro. Y para remate estoy automatizando una bodega en Cádiz, por lo que no puedo ni tocar mis cosas.

Inicialmente tiene buena pinta, lo miraré con detenimiento en cuanto pueda y me haré un conector de cartucho para realizar pruebas en placas de prueba. Yo había pensado en algo parecido a la interfaz CF para los +3e, simple y escueta, pero esto también puede valer y salirnos muy barato. Eso si, lo jodido será implementar soporte FAT para que sea fácil pasar datos de PC a QL sin pasar por nada más.

Un millón de gracias Mc Leod, como siempre estás a la cabeza del desarrollo hardware para los ordenadores Sinclair (por no hablar de las rutinas que te curras).
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2185
Registrado: Lun May 07, 2007 5:34 pm

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor mcleod_ideafix el Mie Jul 21, 2010 4:51 pm

radastan escribió:Mi mujer salió de cuentas ayer... espero ser re-padre de un momento a otro. Y para remate estoy automatizando una bodega en Cádiz, por lo que no puedo ni tocar mis cosas.

Oh! Dios! ¿Vas a hacer fork() de nuevo? Animos para la mamá :)

radastan escribió:Inicialmente tiene buena pinta, lo miraré con detenimiento en cuanto pueda y me haré un conector de cartucho para realizar pruebas en placas de prueba. Yo había pensado en algo parecido a la interfaz CF para los +3e, simple y escueta, pero esto también puede valer y salirnos muy barato.

La idea es que salga barato, y que cualquiera lo pueda soldar, como con el DivIDE. Por eso no he metido el zócalo de CF (que no es sólo el zócalo, sino también el regulador de tensión, etc.) ni he usado una CPLD de montaje superficial, cosa que me ahorraría en realidad espacio y rutado. Además, dado que los CF están un poco de capa caída en favor de las SD, con este montaje puedes pincharle un adaptador de SD a IDE, como se está empezando a hacer en el DivIDE.
Se podría haber hecho aún mas simple y escueto, si permitimos usar sólo la mitad de la capacidad de almacenamiento del dispositivo, como hacen las interfaces de CF baratitas, pero aún así no quedaría taaan sencillo como en el Spectrum, dado que al no tener algunas señales como la de R/W, la lógica de descodificación se complica. Dicho de otra forma: la versión más simple de esto tendría una GAL, una EPROM y el conector IDE, pero entonces, la transferencia entre PC y QL no podría ser automática, al no ser el formato compatible con el PC.

radastan escribió:Eso si, lo jodido será implementar soporte FAT para que sea fácil pasar datos de PC a QL sin pasar por nada más.

Pues mira que eso precisamente no es lo más difícil, al menos como yo lo veo, ya que el sistema de ficheros FAT está suficientemente documentado y hay cantidad de código fuente con implementaciones.
Lo que quisiera saber es, entonces... ¿cuando se implementa un nuevo dispositivo en el QL hay que crearle también un sistema de ficheros? O dicho de otra forma: en el QL, ¿no están separados el driver que implementa el acceso a bajo nivel a un dispositivo de almacenamiento del sistema de ficheros que ha de ser implementado en dicho dispositivo? Un dispositivo "de directorio" (como lo he leido nombrar aquí) del QL ¿qué métodos o interfaces debe exportar para el resto del S.O.?
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor afx el Mie Jul 21, 2010 6:05 pm

Mcleod, llevar a buen puerto un proyecto así sería ¡FANTÁSTICO!. Es lo que la comunidad QL está esperando desde hace años.

Todo lo que planteas suena muy bien. Lamentablemente par mi, mis habilidades están muy alejadas del bajo nivel y de la electrónica como para poder hacer aportaciones de interés.

Sobre lo que cuestionas de la posibilidad de lectura-escritura a través del puerto ROM creo que no hay dudas, es posible.

En un artículo sobre sistemas de expansión de discos duros que publicamos hace tiempo en sinclairql.es (traducción de un artículo de QL-Today) se nombran diversos modelos de expansión de disco duro que existieron en su momento y que empleaban el puerto ROM. Incluso, parece que hay publicadas especificaciones de dominio público de cómo construirlas (aunque no basadas en IDE). Tal vez todo esa documentación sea muy obsotela, pero te la comento por si sirve de algo. La reseña que te comento es esta aquí http://www.speccy.org/sinclairql/articulos/hardware/expan3.htm

Un para de curiosidades. Si un proyecto así se le encargase a un grupo hipotético de ingenieros (2 por ejemplo) ¿cuanto tiempo llevaría ejecutarlo? ¿cuanto sería el coste de desarrollo? (Lo pregunto porque tengo entendido que en el pasado Quanta estuvo valorando financiar algo así).


Saludos y ánimo, el proyecto tiene un pinta estupenda.
afx.
afx
Sabreman
 
Mensajes: 396
Registrado: Dom Feb 24, 2008 11:56 pm

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor mcleod_ideafix el Mie Jul 21, 2010 7:08 pm

afx escribió:Tal vez todo esa documentación sea muy obsotela, pero te la comento por si sirve de algo. La reseña que te comento es esta aquí http://www.speccy.org/sinclairql/articulos/hardware/expan3.htm

Me lo miraré a ver qué tal...

afx escribió:Un para de curiosidades. Si un proyecto así se le encargase a un grupo hipotético de ingenieros (2 por ejemplo) ¿cuanto tiempo llevaría ejecutarlo? ¿cuanto sería el coste de desarrollo? (Lo pregunto porque tengo entendido que en el pasado Quanta estuvo valorando financiar algo así).

Pues por la experiencia en otros proyectos hard/soft que hemos implementado en el departamento, calculo que harían falta eso, dos ingenieros, dedicados durante un mínimo de 6 meses (suponiendo que ninguno de ellos tenga experiencia previa con el QL). Sobre el presupuesto para financiar algo de esto, unos 10.000 euros.
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor mcleod_ideafix el Mie Jul 21, 2010 7:15 pm

afx escribió:En un artículo sobre sistemas de expansión de discos duros que publicamos hace tiempo en sinclairql.es (traducción de un artículo de QL-Today) se nombran diversos modelos de expansión de disco duro que existieron en su momento y que empleaban el puerto ROM. Incluso, parece que hay publicadas especificaciones de dominio público de cómo construirlas (aunque no basadas en IDE). Tal vez todo esa documentación sea muy obsotela, pero te la comento por si sirve de algo. La reseña que te comento es esta aquí http://www.speccy.org/sinclairql/articulos/hardware/expan3.htm


Me lo acabo de mirar, pero... en ese artículo sólo hablan de una interfaz, la QubIDE, que no va por el puerto de ROM, sino por el de expansión. No he encontrado nada en el texto que sugiera que el puerto de ROM acepte ciclos de bus de escritura, que es lo que yo necesito saber.

Por otra parte, me he bajado la imagen ISO y un ZIP bastante gordo, de la web de Radastan, con mucha documentación para QL, pero... tampoco he encontrado ningún tutorial que enseñe a escribir drivers de dispositivos de directorios. Será pedir mucho, pero sería estupendo que existiera algo equivalente a lo que hay publicado para Linux: el "Linux Device Drivers", un libro que usamos mucho en mi asignatura y que es todo un curso sobre cómo escribir drivers para Linux. ¿Existe documentación sobre esto? ¿Se puede encontrar en lo que me he bajado?
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor afx el Mie Jul 21, 2010 9:55 pm

mcleod_ideafix escribió: en ese artículo sólo hablan de una interfaz, la QubIDE, que no va por el puerto de ROM, sino por el de expansión. No he encontrado nada en el texto que sugiera que el puerto de ROM acepte ciclos de bus de escritura, que es lo que yo necesito saber.


En la reseña se comenta que el "Rebel Hard Disk system" y el disco duro de Miracle iban por puerto ROM (no eran discos IDE sino MFM). En aquella época el puerto de expansión del QL estaba pillado por las ampliaciones de disquetera y las ampliaciones RAM, supongo que los ingenieros de la época tuviéron que "ingeniárselas" para poner la controladora del disco por el puerto ROM.

Yo tengo una RomDisQ (8 MB) conectado al puerto ROM y puedo leer y escribir en la memoria flash como si se tratase de un disco duro (el dispositivo para el QDOS aparece como rom1_, lectura y escritura). Creo que con la RomDisQ no me vino sino documentación de usuario, buscaré a ver si encuentro algún tipo de documentación técnica que te pueda aportar más datos.
afx
Sabreman
 
Mensajes: 396
Registrado: Dom Feb 24, 2008 11:56 pm

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor mcleod_ideafix el Mie Jul 21, 2010 10:35 pm

afx escribió:Yo tengo una RomDisQ (8 MB) conectado al puerto ROM y puedo leer y escribir en la memoria flash como si se tratase de un disco duro (el dispositivo para el QDOS aparece como rom1_, lectura y escritura). Creo que con la RomDisQ no me vino sino documentación de usuario, buscaré a ver si encuentro algún tipo de documentación técnica que te pueda aportar más datos.


Sï, conozco el RomDisQ, y claro que tiene que haber alguna forma de escribir. Lo que quiero saber es si la forma de escribir que yo he usado en el boceto es válida. es decir, si ROMOEH se activa con las escrituras. Eso es lo que no he encontrado por ningún sitio. Imagino que me tocará mirarlo por mi cuenta...

Si esto no funcionara, habilitar escrituras en el puerto de ROM se me antoja bastante complicado. Una forma de hacerlo sería reservar dos direcciones (por ejemplo, la FFFEh y la FFFFg) como direcciones "bandera". Para escribir un dato D en el registro R del puerto IDE (con D siendo de 8 bits y R siendo un valor de 0 a 7), habría que hacer algo como esto:
Código: Seleccionar todo
; Supongamos D=5Ch y R=02h
move.l #$FFFE,a5  ;FFFEh es la dirección "llave" que guarda el número de registro al que se quiere escribir el valor.
move.l #$FFFF,a6  ;FFFFh es la dirección "llave" que guarda el valor que se quiere escribir.
move.l #$FE5C,a4  ;A4 tendría un valor del tipo FEXX donde XX es el valor que se quiere escribir.
move.b (a6),d0  ;Señalamos que queremos meter un nuevo valor D (de momento, se guarda en un latch)
move.b (a4),d0  ;Esta lectura en realidad lo que hace es coger el valor de los bits A0 a A7 y lo guarda en el latch.
move.l #$FE02,a4  ;A4 tendría un valor del tipo FEXX donde XX es el valor que se quiere escribir.
move.b (a5),d0  ;Señalamos que queremos meter un nuevo número de registro
move.b (a4),d0  ;Esta lectura lo que hará es coger los valores de A0,A1 y A2 y direccionará la interfaz IDE. Activará la señal de escritura del dispositivo IDE y volcará el contenido del latch.


Es complicado, pero de esta forma se pueden escrribir valores de 8 bits simplemente haciendo operaciones de lectura. Dicho esto, espero de verdad que lo del ROMOEH funcione :?
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor Zerover el Mie Jul 21, 2010 11:50 pm

Creo recordar que Miracle Systems hacía la escritura con dos lecturas seguidas, en la primera lectura la dirección era la dirección donde se quería escribir, en la segunda lectura la dirección era el dato que se quería escribir, supongo que con este sistema se pueden escribir números de 16 bits directamente.
Avatar de Usuario
Zerover
Jack The Nipper
 
Mensajes: 112
Registrado: Mar Abr 08, 2008 9:00 am

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor mcleod_ideafix el Jue Jul 22, 2010 1:33 am

Zerover escribió:Creo recordar que Miracle Systems hacía la escritura con dos lecturas seguidas, en la primera lectura la dirección era la dirección donde se quería escribir, en la segunda lectura la dirección era el dato que se quería escribir, supongo que con este sistema se pueden escribir números de 16 bits directamente.


Pues es más o menos lo que he descrito en el post anterior... Si Miracle hace eso, mucho me temo que lo del ROMOEH no funcione :( ¡Cachis!
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor mcleod_ideafix el Dom Jul 25, 2010 3:58 am

mcleod_ideafix escribió:Pues es más o menos lo que he descrito en el post anterior... Si Miracle hace eso, mucho me temo que lo del ROMOEH no funcione :( ¡Cachis!


Pues nuestros peores temores se cumplieron, y, efectivamente, ROMOEH no se activa en las escrituras al espacio de memoria entre 0000h y FFFFh.
Imagen

La traza corresponde a las señales ROMOEH (arriba) y R/W (abajo). ROMOEH es activa a nivel alto. R/W indica, a nivel bajo, que se está produciendo una escritura. Lo que se ve es la ejecución de este bucle sin fin:
Código: Seleccionar todo
        move.l #$ffff,a0
OtraVez:
        move.b d0,(a0)
        bra OtraVez

No domino el funcionamiento del ciclo de bus del 68008, pero aún así, se puede observar que la traza cubre dos ejecuciones completas del minibucle: partiendo del momento en que se produce la escritura, es decir, cuando se está ejecutando el MOVE.B, vemos que a continuación se leen 2 bytes de la ROM, que corresponden a la instrucción BRA. Luego hay una pequeña pausa, y a continuación se leen 4 bytes. Esta es la parte que me confunde un poco, ya que si supongo que la pequeña pausa es el tiempo que se lleva calculando la dirección efectiva del salto y se ejecuta el salto propiamente dicho, lo siguiente debería ser leer 2 bytes de la instrucción MOVE.B y de nuevo, el ciclo de escritura. En cambio se leen 4 bytes, así que no sé de dónde salen esos dos que me sobran. ¿Será que esta CPU tiene, como el 8086, una cola de prebúsqueda y mientras está calculando el salto ha seguido leyendo instrucciones como si el salto no se hubiera producido? Bueno, sea como fuere, lo cierto es que el boceto no vale y habrá que usar algo parecido a lo que hacen Miracle Systems.

En otro orden de cosas, comentar que intenté hacer este bucle como un programa "normal", llamable desde SuperBASIC. Incluso pasé a modo supervisor, deshabilité las interrupciones poniendo el IPL a 7, etc, y aun así, veía demasiadas "interferencias", es decir, daba la sensación de que el bucle era interrumpido cada X tiempo por otra cosa.
Así que para obtener una traza uniforme he tenido de nuevo que recurrir a escribir una mini-ROM, que gracias al adaptador de José Leandro, me permite reusar una EEPROM de 64K como ROM. De esta forma sí que se ha podido conseguir la traza mostrada :)
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor na_th_an el Mar Jul 27, 2010 1:17 pm

mcleod_ideafix escribió:¿Será que esta CPU tiene, como el 8086, una cola de prebúsqueda y mientras está calculando el salto ha seguido leyendo instrucciones como si el salto no se hubiera producido?


Esto no aporta nada, pero, si no recuerdo mal, la familia de 68000 sí que tiene prebúsqueda. http://pasti.fxatari.com/68kdocs/68kPrefetch.html
Avatar de Usuario
na_th_an
Nonamed
 
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor radastan el Mie Jul 28, 2010 10:25 am

mcleod_ideafix escribió:
radastan escribió:Eso si, lo jodido será implementar soporte FAT para que sea fácil pasar datos de PC a QL sin pasar por nada más.

Pues mira que eso precisamente no es lo más difícil, al menos como yo lo veo, ya que el sistema de ficheros FAT está suficientemente documentado y hay cantidad de código fuente con implementaciones.
Lo que quisiera saber es, entonces... ¿cuando se implementa un nuevo dispositivo en el QL hay que crearle también un sistema de ficheros? O dicho de otra forma: en el QL, ¿no están separados el driver que implementa el acceso a bajo nivel a un dispositivo de almacenamiento del sistema de ficheros que ha de ser implementado en dicho dispositivo? Un dispositivo "de directorio" (como lo he leido nombrar aquí) del QL ¿qué métodos o interfaces debe exportar para el resto del S.O.?


Ese punto es el que menos conozco, por lo que se el sistema operativo sólo trabaja con su sistema de ficheros y el driver sólo hace de interfaz de acceso. Es decir, si el soporte tiene un sistema de archivo distinto al nativo de QL hay que implementarlo en el propio driver a modo de "traductor".

Es por eso que una interfaz tipo CF de 8 bits que sólo aproveche la mitad de la misma puede ser una primera solución económica, aunque no permita pasar cosas desde PC. El problema, como dices, es que no podemos escribir en el puerto de cartuchos, por lo que la electrónica necesaria es casi igual de complicada para una interfaz simple CF que para una IDE completa.

Yo estaré KO hasta la segunda semana de agosto por el resultado del MERGE con mi mujer...
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2185
Registrado: Lun May 07, 2007 5:34 pm

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor mcleod_ideafix el Mie Jul 28, 2010 1:07 pm

radastan escribió:Yo estaré KO hasta la segunda semana de agosto por el resultado del MERGE con mi mujer...


Joer... mira que he escuchado cosas como "hemos hecho un fork() y ha salido un proceso hijo" y frikadas por el estilo, pero esto del MERGE ma llegao :shock:
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3983
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Propuesta de interfaz QL-IDE para puerto de cartucho ROM

Notapor na_th_an el Mie Jul 28, 2010 2:47 pm

Es una expresión muy bonita. Otra más zafia que oí hace poco era de alguien que decía que "le había metido un POKE a su mujer", refiriéndose a que se había quedado en estado.
Avatar de Usuario
na_th_an
Nonamed
 
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía


Volver a Sinclair QL

¿Quién está conectado?

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