Casi toda la informacion que aparece aqui esta basada en unos apuntes que me paso un tio al que lei en FIDO y con el que me comunique por e-mail. A el todo mi agradecimiento.
Mientras me decido a hacer algo de verdad, tambien puedes visitar un par de paginas con info interesante sobre discos duros y disqueteras:


El echo de conectar un disco duro al spectrum, en principio se podria afrontar desde dos prespectivas:
Al menos national y LG tiene chips que contiene en su interior toda la circuiteria necesaria ademas estos chips incluyen conexion serie (2), al puerto paralelo, un 765 para dos disqueteras y un puerto analogico de juegos. El dise¤o de esto plantea bastantes problemas ( encapsulados de 100 patillas smd ) y el tener que entender no solo el disco duro IDE, si no la controladora. No obstante es un enfoque magnifico y del que estoy recopilando informacion.
Al menos he visto que LG tiene en un chip dip de 40 patillas un interfaz SCSI 2, la falta de documentacion de LG en su web me impide profundizar por esta rama.
Esta es la opcion usada. Ya que despues de un analisis de la conexion ide se llega a la conclusion de que esta compuesta por 3 secciones:
16 lineas, correspondientes al un puerto paralelo bidirecional de 16 bits, aqui es donde estara el mayor problema, al ser el spectrum de 8 bits.
Tres lineas de selecion de dispositivo, y 2 de peticion de lectura y escritura.
Lineas de masa, reset y selecion de dispositivo IDE, estas son fijas, y no tienen mas complicacion que cablearlas a las correspondientes del ordenador.
Lo interesante es que toda la comunicacion con el disco se puede hacer a traves del puerto, leyendo o escribiendo las ordenes o datos de uno en uno, no es necesario implementar circuitos de DMA, buffers ni cosas raras.
Nos encontramos con el problema de que al ser puertos de 16 bits es necesario escribir tanto el byte alto como el bajo simultaneamente, para que el disco duro no confunda. Y es aqui donde esta toda la complicacion del circuito, en a base de 16 direcciones de 8 bits, crear 8 de 16 ( en realidad son 1 direciones de 16 bits, y puede que 7 de 8 bits ). mediante un sencillo circuito y unos pocos buffer, latch y basculas.
La fuente inicial de este documento esta basada en una serie de imagenes escaneadas de una revista en la que ponian como hacerlo, aunque el circuito que se da es una version bastante mas eficaz y facil.

Este es el texto, tal como estaba en unos TIF escaneados que me pasaron:
No se de donde lo sacaron, ni por que esta la mitad en aleman y la mitad en ingles, pero parecia ser continuacion uno de otro
wleder elne tolle nachricht aus den nlederlander: Das Projekt Harddisk am sprectrum steht ... und funk tioniert. Unser Dank geht an Roelof Koning. Der uns die nachfolgenden informationen zusandte.
Leider telt er mil. DaB es kelne seriemproduktion geben wird. somit muB also jeder. den dieses interface interesslert. es sich selber nachbauen (bzw. bauen lassen). Damit es keine Ubersetzungsfehler gibt. bringen wir den Artike im original (also in englisch) wir sind aber ganz sicher. DaB roelof bel nachfragen den interesslerten gerne auskunft geben wird.
These 'select'-lines comes from the adress decoders LS688. Pin 19. This means that this system also could be driven otherwise. If only 4 signal wires for OUT are avalible. for example a fully wired printerport could do this job ( alas, not on the spectrum)? And maybe it is possible to use even fewer signals.
At last in the way I use this HD-System on Opus now. where the possible maximun speed is no used at all. one couls think of returning to the 'PIO' idea. Replacing the 4 small 'datachips' by one PIO or PIA (like 6821?) doing the 8/16 bits conversion under software. So there is also roomleft for other inventors!
About compability (connectivity) with Plus D I can't tell you much at this moment. But of course this can change in one 'brainwave'.
It's a pity I don't know full details of harddisk references. As I added a R/C filter (470/330) in order to shorten the read-pulse given to HD. this solved some loading errors. So I suppose it had to do with timings. I can't measure these 'high frecuencies'.
|
TASK adresses |
COMMANDS (some) |
STATUS bits |
Error register bits |
|
240 = datareg. 241 = error 242 = sect cnt 243 = sectornr 244 = cylnr lo 245 = cylnr hi 246 = drv/head 247 = command 248 = status 223 = reset |
236 = identity 18 = track 0 114 = seek trk. 33 = read sect. 228 = read buff. |
0 comm error 1 index hole 2 ECC restored 3 waiting/rdy 4 seek ready 5 write fault 6 drive ready 7 busy 80 & 82 = O.K. |
0 No data addr. mark. 1 Track 0 error 2 Command Aborted 4 Sector ID error 6 ECC error 7 Bad block |
Connecting a standar 16 bits IDE harddisk (as used on PC) to the (8bits) Spectrum. The main purpose of this interface is 8/16 bits data conversion. When reading/writing from/to the DATA-register of the Harddisk. Although the other internal HD-registers are only 8 bits wide. These are not treated apart. Writing a 'dummy' bute is needed here to complete 16 bits. When reading. The 'first' byte is valid. and a dummy-read can be skipped when any OUT registerport. TASKaddress. Then the 'odd/even' (8/16) counter is reset. and data can be read from or written to this register. using the 'dataport'. Notice that the registerport' is OUT only. On the spectrum anly two free IO addresses have to be found. and the dipswitches on the interface must be set accordingly, On a spectrum + Opus conbination the addresses 251 and 191 are O.K. A special case is 'Reset' Feeding this 'taskaddress' to the 'registerport'. Does not reset the Harddisk immediately. A read from the dataport must follow in order to activate this command.

El siguiente esquema es la version del circuito que me enviaron por E-mail, todo un trabajo
en ASCII que se agradece:

La principal diferencia entre los dos esquemas esta en la manera de orientar el circuito, asi mientras el primero utiliza unicamente dos direcciones de memoria y estas son configurables, el segundo utiliza un total de 16 direcciones, de las cuales 7 no se usan, y todas ellas son fijas, con lo que se consigue una gran simplificacion en el esquema.
tres de las patillas del bus van directamente al IDE, siendo utilizadas para indicar al disco duro la operacion a realizar. Debido al echo de que es un interfaz de 16 bits su uso es el siguiente:
ESCRIBIR:
1º Se escribe el Byte alto si es necesario en cualquiera de las 8
direcciones ( en la suya o en las 7 no usadas ).
2º Se escribe el Byte bajo en la direccion correcta.
Los datos son pasados al IDE en el momento en que se escribe el Byte bajo.
Esto es asi porque salvo los datos en si, el resto solo usa los 8 bits
inferiores, pudiendo prescindir del byte alto que es ignorado.
LEER:
1º Se lee de la direccion correcta el Byte bajo.
2º Se lee de la otra direccion el byte alto.
Los datos se recogen del IDE en el momento de leer el byte bajo.
no es necesario leer el byte alto.
La principal ventaja que nos encontramos en este metodo es que es mucho mas rapido
ya que leer un dato lleva 1 o 2 OUTs, en comparacion con el otro circuito en que
hacen falta 3 o 4 OUTs.
En el esquema se puede observar como la lectura o escritura en determinado puerto carga los latch con los valores adecuados, que son pasados mediante los buffer al IDE o al bus del spectrum en el momento adecuado.
Una vez decidido el metodo a seguir es necesario ver en que direcciones pondremos la interfaz.
Debido a la organizacion del Spectrum ( y al diseño de zilog) aunque se pueden utilizar 65535 puertos, en realidad se reducen a 255, por comodidad, siendo la parte alta del bus, una copia del bus de datos ( existen OUTs e INs especificos en que no es asi, son los que utilizaremos ).
Segun el manual solo estan libres los bits A6 y A7, Sinclair en su intento de simplificar la arquitectura del spectrum, paso de usar decodificadores de lineas y asigno a cada linea Ax un dispositivo, eso hace que por ejemplo para aceder al teclado basta con poner el bit A0 a 0, el resto no importa (en este caso no importan A1 a A7 ). Vamos a ser un poco formales, y pensando en otras aplicaciones, haremos que sea necesario que tanto A6 como A7 esten a 0 para usar el puerto IDE. Los otros tres bits necesarios se tomaran respectivamente de A8( byte alto o bajo), A9, A10 y A11.
