Simplificando el Spectrum. Duda tecnica.

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
Namek
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 635
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 27 veces

Re: Simplificando el Spectrum. Duda tecnica.

Mensajepor Namek » 17 Sep 2018, 00:10

Kyp escribió:Ya existe un reemplazo de ULA perfecto basado en una CPLD Xilinx XC95144XL que vale unos 10 y 15 euros. Incluso hay algunos Spectrums montados como el que dices: http://www.zxuno.com/forum/viewtopic.php?t=1749
Yo tengo uno :mrgreen:
MOLA!!! Es exactamente lo que tenia en mente, y dices que tu tienes un HUMBLE48 de estos? Como lo conseguiste y cuanto te costo?

Avatar de Usuario
Kyp
Amstrad CPC 472
Amstrad CPC 472
Mensajes: 65
Registrado: 31 Dic 2013, 12:42
Sistema Favorito: Commodore Amiga
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: Vectrex
Gracias dadas: 1 vez
Gracias recibidas: 2 veces

Re: Simplificando el Spectrum. Duda tecnica.

Mensajepor Kyp » 17 Sep 2018, 16:35

Si has leído el hilo del foro original habrás visto que el Humble es un proyecto personal si ánimo de ser algo comercial. Cuando el autor comentó en el foro que había hecho un pedido de placas (hay que pedir 10 como mínimo) para probar el concepto, ofreció las que le sobraban por si alguien quería también probar el diseño. Yo le pedí una y el precio fue casi de regalo. Casi todos los componentes los tenía ya de otros montajes (yo también hago mis pinitos :D ) así me ha salido muy barato. El diseño creo que es libre así que cualquiera puede fabricarse el suyo. Hay otros diseños similares, uno de Superfo por ejemplo que lleva una CPLD de Altera más fácil de soldar. Antonio Villena creo que ha hecho alguna tirada de esas otras placas.

Por cierto que el diseño de la ULA es de mcleod.

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 520
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 12 veces
Gracias recibidas: 15 veces

Re: Simplificando el Spectrum. Duda tecnica.

Mensajepor Bubu » 17 Sep 2018, 20:04

Namek escribió:Esa señal se activa cuando el Z80 ejecuta un IN o un OUT, de esa forma los OUT no afectan a la RAM ni los IN leen de la RAM cuando deben leer de los puertos.


Y entóns ¿cómo es que a Sinclair se le ocurrió meter una ULA en el Spectrum que hacía todo eso, con lo tacaño que era? ¿pa qué le cedió el trabajo a la ULA si el Z80 lo podía hacer todo (salvo lo de generar la imagen)?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Namek
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 635
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 27 veces

Re: Simplificando el Spectrum. Duda tecnica.

Mensajepor Namek » 18 Sep 2018, 00:19

Bubu escribió:Y entóns ¿cómo es que a Sinclair se le ocurrió meter una ULA en el Spectrum que hacía todo eso, con lo tacaño que era? ¿pa qué le cedió el trabajo a la ULA si el Z80 lo podía hacer todo (salvo lo de generar la imagen)?
Pues por varias razones:

1º En aquella epoca no existian los integrados programables vease CPLDs, FPGAs.
2º Conseguir el mismo resultado con componentes standard de la epoca hubiera sido mas caro y mas complicado.
3º La ULA se encargaba tambien de "parar" al Z80 para poder leer la RAM de video y generar la pantalla.
4º Tambien permitia conectar dispositivos externos por el BUS de expansion sin que entraran en conflicto con el teclado o el sonido.

Todo esto a posteriori y con el paso del tiempo se ha "simplificado", ya en su epoca el INVES+ soluciono el problema de el acceso a RAM de VIDEO usando memoria mas rápida de la original y pudiendo multiplexar el acceso sin tener que parar al Z80.

Curiosamente esta mejora del diseño provocaba incompatibilidades... :roll:

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 520
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 12 veces
Gracias recibidas: 15 veces

Re: Simplificando el Spectrum. Duda tecnica.

Mensajepor Bubu » 18 Sep 2018, 00:55

Nonoooono, no me s'ha entendío. Tú dices de hacer un "Spectrum" sin ULA, simplemente con un chip que genere el vídeo. Yo entonces te dije que cómo vas a leer el teclado, emitir el sonido, etc. Y tú me dijiste que conestando direstamente las teclas al Z80, ya que el Z80 al hacer IN/OUT sabe por dónde llevar el bus de direcciones y datos. Y entonces te pregunto ahora que si es tan fácil y todo lo puede hacer el Z80 sin necesidad de la ULA, ¿por qué Sinclair necesitó la ULA para conestar el teclado, y todos los puertos en general? ¿No hubiera sido más barato no tener que hacer una ULA tan "trabajadora"?

Y lo segundo que no entiendo es la señal que dices que tienen los Z80 que hacen el bus de direcciones se desconecte de la RAM y se dirija al puerto del teclado ¿??¿?¿? ¿Qué señal es esa?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 2601
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 41 veces
Gracias recibidas: 166 veces
Contactar:

Re: Simplificando el Spectrum. Duda tecnica.

Mensajepor zup » 18 Sep 2018, 07:21

Bubu escribió:Nonoooono, no me s'ha entendío. Tú dices de hacer un "Spectrum" sin ULA, simplemente con un chip que genere el vídeo. Yo entonces te dije que cómo vas a leer el teclado, emitir el sonido, etc. Y tú me dijiste que conestando direstamente las teclas al Z80, ya que el Z80 al hacer IN/OUT sabe por dónde llevar el bus de direcciones y datos. Y entonces te pregunto ahora que si es tan fácil y todo lo puede hacer el Z80 sin necesidad de la ULA, ¿por qué Sinclair necesitó la ULA para conestar el teclado, y todos los puertos en general? ¿No hubiera sido más barato no tener que hacer una ULA tan "trabajadora"?


En alguna parte leí que replicar el circuito de una ULA con componentes discretos ocuparía casi tanto espacio como la placa del Spectrum. Imagina el tamaño de un Spectrum sin ULA. Supongo que es una exageración (a fin de cuentas, el Harlequin no usa ULA y ocupa el mismo espacio que un Spectrum normal con circuitería TTL normal), pero si vas a fabricar unos cuantos miles de unidades te sale más barato (tanto en componentes como en fabricación) hacer el equipo con chips personalizados que con varias docenas de componentes más.

(En realidad, el Harlequin hace "trampa" en su diseño. En el Spectrum original, una buena parte del espacio se la lleva por delante los dos bancos de RAM. En el Harlequin se usan dos chips de RAM 32kx8 que ocupan una fracción del espacio, y el espacio "liberado" se usa para las cosas que van dentro de la ULA.)

Bubu escribió:Y lo segundo que no entiendo es la señal que dices que tienen los Z80 que hacen el bus de direcciones se desconecte de la RAM y se dirija al puerto del teclado ¿??¿?¿? ¿Qué señal es esa?


(Todo esto va de memorieta, seguro que contiene errores)

Todo micro que tiene separado espacio de memoria y de entrada/salida tiene una señal equivalente. En el Z80, puedes ver las patas 19, 20, 21 y 22 (MREQ, IORQ, RD, WR) que son las que se emplean para este fin. Todas ellas las controla la CPU y van hacia la RAM/periféricos.

RD y WR indican si la CPU va a leer o escribir. En el caso de que RD esté activa, la CPU espera que la memoria o el dispositivo metan el dato en el bus; en el caso de WR es la CPU la que va a poner el dato en el bus. En su forma más simple, estas señales deberían ir cableadas a las patas equivalentes de las memorias RAM.

MREQ e IORQ indican si la CPU quiere tratar con la memoria (MREQ) o con los puertos de datos (IORQ). Simplificando esto, MREQ podría ir conectada a los pines OE o CS de la RAM (que indican a los chips cuando están o no conectados al bus de datos).

Todas estas señales pueden denominarse de diferente manera según el fabricante del chip, pero tiene funciones equivalentes. Ahora mismo me estoy preguntando por qué existen parejas RD/WR y MREQ/IORQ cuando estas señales deberían ser exclusivas (no puedes tener activas a la vez RD y WR)... imagino que es por comodidad a la hora de diseñar los circuitos (*). También ten en cuenta que hablo de señales activas... en el caso del Z80 estas señales son activas a nivel bajo, lo que significa que para leer un dato en memoria RD y MREQ deberían estar a 0 lógico.

(*) EDITO: Todas estas señales son triestado. Imagino que se pueden poner estas señales a "alta impedancia" (desconectadas) y que sea un periférico el que tome el control de las señales (por ejemplo, para un DMA o para que un circuito como la ULA pueda leer de la RAM sin provocar cortocircuitos). En ese caso sí que es interesante tener estas señales separadas.

EJEMPLO: Ejecución de out (c),a. Simplificando, esto pasa en tres pasos:

PASO 1: Lectura del primer opcode desde la RAM.
- RD, MREQ y M1 activas.
- Bus de direcciones: el contenido del registro PC (este dato pone en el bus la CPU).
- Bus de datos: 237 (este dato pone en el bus la RAM).

PASO 2: Lectura del segundo opcode desde la RAM.
- RD y MREQ activas.
- Bus de direcciones: el contenido del registro PC+1 (este dato pone en el bus la CPU).
- Bus de datos: 121 (este dato pone en el bus la RAM).

PASO 2: Envío de datos al periférico.
- WR e IORQ activas.
- Bus de direcciones: el contenido del registro bc (este dato pone en el bus la CPU).
- Bus de datos: el contenido del registro a (este dato pone en el bus la CPU).

En realidad, las señales RD, WR, MREQ, IORQ y M1 son "informativas". RD informa a memoria y periféricos que la CPU espera que pongan un dato en el bus, WR informa que NO deben poner datos en el bus. Lo que no quita que (por ejemplo) un periférico como el divIDE esté permanentemente monitorizando todas las señales y se active cuando M1, RD y MREQ estén activas y además el bus de direcciones contenga 1366.

NOTA: Estaba mirando los esquemas del 48k para ver cómo la ULA para la CPU... ¿deduzco que la ULA interfiere en la señal de CLK que va a la CPU? Dado que no se detiene la CPU durante mucho tiempo ¿no hubiera sido más natural usar la señal WAIT?
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!

Avatar de Usuario
Namek
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 635
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 27 veces

Re: Simplificando el Spectrum. Duda tecnica.

Mensajepor Namek » 18 Sep 2018, 10:39

Resumiendo: Sinclair puso una ULA porque tenia pensado conectar mas cosas al Spectrum ademas del teclado y el cassette: Joysticks, Impresoras, Microdrives, Modems, etc...

Lo que me ronda el coco ahora es ¿como de simple o complicado sería conectar el teclado y el audio in/out al Z80 sin usar la ULA ni un integrado programable?

Avatar de Usuario
PabloMarmol
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 142
Registrado: 03 Sep 2012, 17:32
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
Primera consola: Nintendo NES/Clónica
Ubicación: León, España
Gracias dadas: 6 veces
Gracias recibidas: 6 veces

Re: Simplificando el Spectrum. Duda tecnica.

Mensajepor PabloMarmol » 18 Sep 2018, 10:58

uy, vaya lío.
Por un lado tenemos la pregunta de "¿y por qué hace falta entonces la ULA?".
Y por otro lado están las explicaciones de cómo funciona el z80 conectado a los buses, con sus señales y esas cosas.
Y la respuesta a la primera pregunta es "Si, hace falta la ULA", porque esas cosas que en teoría podrían ir conectadas a los buses, el teclado y el cassette, resulta que son tontos (el teclado son simples contactos que se abren o se cierran) y no saben de señales de control en los buses, no saben cuando estar "desconectados" y cuando conectarse cuando la cpu quiera leer o escribir en ellos, así que necesitan "algo" (la ULA) que lo haga por ellos.

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 520
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 12 veces
Gracias recibidas: 15 veces

Re: Simplificando el Spectrum. Duda tecnica.

Mensajepor Bubu » 18 Sep 2018, 11:17

Pues eso

:D
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Namek
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 635
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 27 veces

Re: Simplificando el Spectrum. Duda tecnica.

Mensajepor Namek » 18 Sep 2018, 12:05

PabloMarmol escribió:uy, vaya lío.
Por un lado tenemos la pregunta de "¿y por qué hace falta entonces la ULA?".
Y por otro lado están las explicaciones de cómo funciona el z80 conectado a los buses, con sus señales y esas cosas.
Y la respuesta a la primera pregunta es "Si, hace falta la ULA", porque esas cosas que en teoría podrían ir conectadas a los buses, el teclado y el cassette, resulta que son tontos (el teclado son simples contactos que se abren o se cierran) y no saben de señales de control en los buses, no saben cuando estar "desconectados" y cuando conectarse cuando la cpu quiera leer o escribir en ellos, así que necesitan "algo" (la ULA) que lo haga por ellos.
Correcto, pero es precisamente eso lo que me gustaría saber, la ULA hace muchas cosas, pero yo lo unico que quiero es gestionar el teclado y el audio in/out, por tanto seguro que esas 2 únicas funciones se pueden implementar electronicamente sin usar una ULA y la cuestión es como de facil o de dificil. Por supuesto que se podría usar un CPLD y programarlo solo con esas funciones, pero si hay alguna posibilidad de hacerlo mas simple o mas barato es lo que me gustaría saber.


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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