Clon ZX Spectum 128 (ULA+)

Proyectos de hardware con sus esquemáticos y si llevan software en fuente

Moderadores: cacharreo, Fundadores

Reglas del Foro
Aquí solo tienen cabida proyectos de hardware que incluyan siempre al menos sus esquemáticos para poder reproducirlos si llevan componentes electrónicos, y si es posible los ficheros del programa en que se hacen, los diseños de las placas, los gerber, etc. Si llevan algún tipo de software asociado debe estar diponible el código fuente

Para los que no cumplen estas condiciones se debe postear en el foro de proyectos generales.
Avatar de Usuario
Quili
Le gustan las llamas
Le gustan las llamas
Mensajes: 85
Registrado: 31 May 2017, 21:04
Ubicación: León
Contactar:

Re: Clon ZX Spectum 128 (ULA+)

Mensaje por Quili »

Os leo lo que comentáis y parece que habláis como el que va a comprar una barra de pan, como si nada, se cambia la placa, se ajusta aquí y allá y ya esta, a funcionar.
Profano de mi, cuanto me gustaría haber estudiado electrónica. :o
Avatar de Usuario
Kyp !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3376
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 28 times
Been thanked: 146 times

Re: Clon ZX Spectum 128 (ULA+)

Mensaje por Kyp »

Ya he grabado la ROM :)) y me he puesto a repasar la implementación.
De momento le he añadido el (d)efecto ULA Snow que no estaba implementado en la versión de 48K (para esto si hay que hacer un puente para conectar la señal /RFSH a la CPLD).
Avatar de Usuario
flopping
Fundador
Fundador
Mensajes: 9971
Registrado: 29 Mar 2013, 15:26
Ubicación: Valencia
Been thanked: 122 times
Contactar:

Re: Clon ZX Spectum 128 (ULA+)

Mensaje por flopping »

Kyp escribió: 12 Dic 2020, 13:13 Ya he grabado la ROM :)) y me he puesto a repasar la implementación.
De momento le he añadido el (d)efecto ULA Snow que no estaba implementado en la versión de 48K (para esto si hay que hacer un puente para conectar la señal /RFSH a la CPLD).
¿Y para que queremos el ULA snow?, yo sinceramente ese tipo de defectos, los quitaria, ya que molestan mas que otra cosa, vale que si quieres una implememtacion "exacta" hay que replicarlo todo como el original, pero es que eso justamente, es un defecto que no se corrigio en su dia y se ha ido arrastrando. :~(
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, por la esquizofrenia paranoide.
(C) 1982-2024, 42 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".

Mi juego, que puedes descargar desde aqui
Avatar de Usuario
mad3001 !Atari
Demonio segundo orden
Demonio segundo orden
Mensajes: 1921
Registrado: 25 Nov 2015, 00:15
Ubicación: Mostoles(Madrid)
Has thanked: 81 times
Been thanked: 113 times

Re: Clon ZX Spectum 128 (ULA+)

Mensaje por mad3001 »

flopping escribió: 12 Dic 2020, 13:19
Kyp escribió: 12 Dic 2020, 13:13 Ya he grabado la ROM :)) y me he puesto a repasar la implementación.
De momento le he añadido el (d)efecto ULA Snow que no estaba implementado en la versión de 48K (para esto si hay que hacer un puente para conectar la señal /RFSH a la CPLD).
¿Y para que queremos el ULA snow?, yo sinceramente ese tipo de defectos, los quitaria, ya que molestan mas que otra cosa, vale que si quieres una implememtacion "exacta" hay que replicarlo todo como el original, pero es que eso justamente, es un defecto que no se corrigio en su dia y se ha ido arrastrando. :~(
Bueno, aunque lo llamen defecto, realmente en algún juego precisamente se usa como "efecto", por ejemplo en Vectron.
Volviendo a los origenes... programa en assembler
Avatar de Usuario
zx81
Aspirante a demonio
Aspirante a demonio
Mensajes: 499
Registrado: 19 Oct 2013, 16:27
Ubicación: Valencia
Has thanked: 10 times
Been thanked: 2 times
Contactar:

Re: Clon ZX Spectum 128 (ULA+)

Mensaje por zx81 »

flopping escribió: 12 Dic 2020, 13:19
Kyp escribió: 12 Dic 2020, 13:13 Ya he grabado la ROM :)) y me he puesto a repasar la implementación.
De momento le he añadido el (d)efecto ULA Snow que no estaba implementado en la versión de 48K (para esto si hay que hacer un puente para conectar la señal /RFSH a la CPLD).
¿Y para que queremos el ULA snow?, yo sinceramente ese tipo de defectos, los quitaria, ya que molestan mas que otra cosa, vale que si quieres una implememtacion "exacta" hay que replicarlo todo como el original, pero es que eso justamente, es un defecto que no se corrigio en su dia y se ha ido arrastrando. :~(
La pega que yo tengo con ese defecto, y por eso lo implementé en JSpeccy y luego lo quité, es que no estoy muy seguro que esté correctamente determinado cuando, cómo y dónde sucede. Sí, si sacas "basurilla" aleatoria das el pego, pero es muy difícil replicar exactamente el efecto y mucho menos comprobar si lo estás haciendo bien. Yo lo pondría, es un defecto "muy Spectrum", pero dado que solo lo aprovecha Vectron y algún test, me da rabia implementar una característica con tantas incertidumbres.

My two cents...
Today's robots are very primitive, capable of understanding only a few simple instructions such as 'go left', 'go right' and 'build car'.
John Sladek

Emulador de Spectrum JSpeccy.
Emulador de Spectrum Bare-metal para las Raspberry PI ZXBaremulator
Avatar de Usuario
Kyp !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3376
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 28 times
Been thanked: 146 times

Re: Clon ZX Spectum 128 (ULA+)

Mensaje por Kyp »

El ULA Snow no tiene nada de aleatorio, está perfectamente definido como pasa. Básicamente es esto:
wire[12:0] a = { va[12:7], !rfsh && ca[15:14] == 2'b01 ? ca[6:0] : va[6:0] };

Que traducido es:

va = video address, la dirección de memoria que quiere leer la ULA.
ca = cpu address, la dirección de memoria que quiere leer la CPU.
a = lo que realmente lee la ULA.

El valor de a depende de si la señal /rfsh está activa (vale 0) y de si los dos bits más altos de la dirección que quiere leer la CPU (ca[15:14]) son 01. Si no se cumple la condición la ULA lee la dirección que quiere leer. Si se cumple la condición la dirección efectiva que lee la ULA es, la mitad inferior (bits [6:0]) son los de la ULA y la mitad superior (bits [12:7] son los de la CPU).

¿Por qué es solo la mitad? Pues porque como el bus de memoria está multiplexado (se asigna en dos tiempos), debido a la temporización con que ocurren las señales internamente, la CPU solo pisa una de las partes.

¿Por qué ocurre? Porque el mecanismo de contienda no tiene en cuenta la señal /rfsh así que cuando la CPU quiere refrescar la memoria compartida con la ULA, esta no bloquea el acceso como hace en el resto de casos y la CPU interfiere con la dirección que intenta asignar la ULA.
Avatar de Usuario
zx81
Aspirante a demonio
Aspirante a demonio
Mensajes: 499
Registrado: 19 Oct 2013, 16:27
Ubicación: Valencia
Has thanked: 10 times
Been thanked: 2 times
Contactar:

Re: Clon ZX Spectum 128 (ULA+)

Mensaje por zx81 »

Complicado entonces de emular por software, principalmente porque el refresco se produce durante los T3-T4 de M1, y en un emulador no se hace un cálculo tan fino de tiempos, al menos en los emuladores que yo he visto.

Lo que no veo claro es la dirección de la CPU. Si es una lectura sin /RFSH la cosa no admite discusión, es la dirección del opcode que está tratando. Pero si /RFSH está activa la dirección que se ve en el bus debería ser el contenido del conjunto 'IR', ya que es lo que pone en ese caso la CPU. O eso creo, no puedo hacer pruebas exhaustivas al respecto porque no tengo analizadores ni osciloscopios. De hecho, el problema se produce precisamente cuando se pone el registro I entre 0x40 y 0x7F y no en otro caso.

Como no veo el resto del código VHDL no sé si en el T80 se respeta lo de sacar ese contenido al bus en ese momento (y en otros que no debería, dicho sea de paso). A veces, la Z80 deja en el bus contenidos de IR o de otros registros en pasos intermedios para luego volver a usarlos o no, hay un poco de todo. Es más, en algunas instrucciones como DJNZ parece que la señal /RFSH se extiende hasta un T5 de M1 o un T1 de M2, incluso más allá, como INC DE.
Today's robots are very primitive, capable of understanding only a few simple instructions such as 'go left', 'go right' and 'build car'.
John Sladek

Emulador de Spectrum JSpeccy.
Emulador de Spectrum Bare-metal para las Raspberry PI ZXBaremulator
Avatar de Usuario
Kyp !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3376
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 28 times
Been thanked: 146 times

Re: Clon ZX Spectum 128 (ULA+)

Mensaje por Kyp »

No se que decirte, no conozco las interioridades del Z80 tan bien como tú. Además, en la FPGA hay dos buses de datos, el de entrada es independiente del de salida, no está compartido como en un ordenador real.
Avatar de Usuario
sinclair200 España
Moderador
Moderador
Mensajes: 9988
Registrado: 28 Mar 2014, 18:25
Ubicación: Madrid
Has thanked: 8 times
Been thanked: 177 times

Re: Clon ZX Spectum 128 (ULA+)

Mensaje por sinclair200 »

Falta mucho para finalizar este proyecto.....? =)
Imagen
Z80 INSIDE.........
WANTED:…………. CPC 6128 british
Avatar de Usuario
Kyp !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3376
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 28 times
Been thanked: 146 times

Re: Clon ZX Spectum 128 (ULA+)

Mensaje por Kyp »

Ya tengo un +2 (sin ULA+ de momento) con DivMMC en fase de pruebas :D :D :D
Responder

Volver a “Proyectos de hardware abiertos”